为了账号安全,请及时绑定邮箱和手机立即绑定

Go 1.18 中的“any”类型是什么?

Go 1.18 中的“any”类型是什么?

Go
慕容森 2022-12-05 16:43:57
在 Visual Studio Code 中,自动完成工具(我猜是gopls?)提供了以下模板:m.Range(func(key, value any) bool {    })哪里m是一个sync.Map。该类型any未被识别,但被放在那里。是什么any?我可以放我想要的类型并希望 Go 1.18 为我做隐式类型转换吗?例如:m.Range(func(k, v string) { ... })这将在回调中将k,v作为字符串给出,而无需自己进行类型转换?
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

any是一个新的预先声明的标识符和类型别名interface{}

它来自问题49884 、CL 368254提交 2580d0e

该问题提到interface{}any

这不是特殊的设计,而是 Go 类型声明语法的逻辑结果。

您可以使用具有多个零方法的匿名接口:

func f(a interface{Foo(); Bar()}) {
   a.Foo()
   a.Bar()
}

类似于如何在任何需要类型的地方使用匿名结构:

func f(a struct{Foo int; Bar string}) {
   fmt.Println(a.Foo)
   fmt.Println(a.Bar)
}

空接口恰好匹配所有类型,因为所有类型至少有零个方法。如果您想保持一致/不想引入特殊情况,
删除意味着从语言中删除所有界面功能。interface{}


查看完整回答
反对 回复 2022-12-05
  • 1 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信