go语法入门any类型的使用场景示例详解

 更新时间:2023年09月06日 09:23:52   作者:海生  
这篇文章主要为大家介绍了go语法入门any类型的使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、介绍

在没有any类型之前,go语言中,我们经常使用interface{},来表示一个类型是未知的,或者有好几种其他基础类型的情况。
从 Go1.18开始,go官方定义了一个预声明标识符(Predeclared identifiers):any。

// any is an alias for interface{} and is equivalent to interface{} in all ways.
// any 是一个 interface{}的 别名,并且在任何情况下和interface{}相同。
type any = interface{}

官方的定义,告诉了我们any就是interface{}的别名,用来代替interface{}的。
go源码中现在也大量的使用any比如:

func Print(a ...any) (n int, err error) 
func Println(a ...any) (n int, err error)
type Pointer[T any] struct
var expunged = new(any)
dirty map[any]*entry 
func Marshal(v any) ([]byte, error) 
......

太多地方用到了,基本上go官方,用any代替了任何interface{}出现的地方。

二、any的最佳实践

2.1 在map的情况下,map更适合做key

我们先来看一个下面两个时间,大家比较一下,哪一个比较好。

func TestAny(t *testing.T) {
    m1 := make(map[any]string, 0)
    m1["1"] = "1"
    m1[2] = "2"
    var v1 string = m1["1"]
    var v2 string = m1[2]
    t.Log(v1, v2)
    m2 := make(map[string]any, 0)
    m2["1"] = "1"
    m2["2"] = 2
    var v3 string = m2["1"].(string)
    var v4 int = m2["2"].(int)
    t.Log(v3, v4)
}

结论是 m1这种方式好。为什么,因为用做key的话,这样我们无论做为保存,还是读取,都无需多做什么操作。
m2这种方式,我们需要拿到数据后,进行类型的转换。这一步还的和之前保存的一样,就很复杂。

2.2 函数的参数和返回值,any更适合做参数

在官方的json解析包里面。无论是编码还是解码,any都只是作为参数。

func Marshal(v any) ([]byte, error)
func Unmarshal(data []byte, v any) error

如果是返回值的话,我们调用这个函数,还得进行返回值的类型转换,这对于调用方,无疑是巨大负担。

但作为参数,对于调用方,是巨大的便利,他可以传入各种类型。

以上就是go语法入门any类型的使用场景示例详解的详细内容,更多关于go语法入门any类型使用的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:

相关文章

  • Go语言集成开发环境之VS Code安装使用

    Go语言集成开发环境之VS Code安装使用

    VS Code是微软开源的一款编辑器,插件系统十分的丰富,下面介绍如何用VS Code搭建go语言开发环境,需要的朋友可以参考下
    2021-10-10
  • golang时间字符串和时间戳转换的案例

    golang时间字符串和时间戳转换的案例

    这篇文章主要介绍了golang时间字符串和时间戳转换的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang中时间相关操作合集

    Golang中时间相关操作合集

    这篇文章主要为大家介绍了Golang中的各种时间相关操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Golang 统计字符串中数字字母数量的实现方法

    Golang 统计字符串中数字字母数量的实现方法

    这篇文章主要介绍了Golang 统计字符串中数字字母数量,本文给出了两种从字符串获取数字与字母数量的方法,分别是ASCII 码值和正则表达式,需要的朋友可以参考下
    2022-06-06
  • Golang程序中使用Prometheus的client_golang库

    Golang程序中使用Prometheus的client_golang库

    这篇文章主要介绍了Golang程序中使用Prometheus的client_golang库,Prometheus 是一个开源的监控和警报工具包,用于收集和处理应用程序和系统的指标数据。Prometheus 提供了多种客户端库,可以轻松地集成到各种编程语言中
    2023-04-04
  • Golang token的生成和解析详解

    Golang token的生成和解析详解

    这篇文章主要给大家介绍了Golang token的生成和解析,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • 揭秘Go Json.Unmarshal精度丢失之谜

    揭秘Go Json.Unmarshal精度丢失之谜

    我们知道在json反序列化时是没有整型和浮点型的区别,数字都使用同一种类型,在go语言的类型中这种共同类型就是float64,下面我们就来探讨一下Json.Unmarshal精度丢失之谜吧
    2023-08-08
  • 详解如何在golang镜像中设置指定时区

    详解如何在golang镜像中设置指定时区

    这篇文章主要为大家详细介绍了如何在golang镜像中设置指定时区,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以了解一下
    2023-04-04
  • Go Web后台管理系统项目实现

    Go Web后台管理系统项目实现

    本文主要介绍了Go Web后台管理系统项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • golang实现协程池的方法示例

    golang实现协程池的方法示例

    本文主要介绍了golang实现协程池的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02

最新评论