在 Visual Studio Code 中,自动完成工具(我猜是gopls
?)提供以下模板:
m.Range(func(key, value any) bool {
})
Run Code Online (Sandbox Code Playgroud)
哪里m
是 a sync.Map
. 该类型any
无法识别,但被放在那里。
什么是any
?我可以放入我想要的类型并希望 Go 1.18 为我做隐式类型转换吗?例如:
m.Range(func(k, v string) { ... })
Run Code Online (Sandbox Code Playgroud)
这将给出k
,v
作为回调中的字符串,而不必自己进行类型转换?
Von*_*onC 10
any
是一个新的预声明标识符和类型别名interface{}
。
它来自问题 49884、CL 368254和提交 2580d0e。
该问题提到了interface{}
/ any
:
这不是一个特殊的设计,而是 Go 类型声明语法的逻辑结果。
您可以使用具有多个零个方法的匿名接口:
Run Code Online (Sandbox Code Playgroud)func f(a interface{Foo(); Bar()}) { a.Foo() a.Bar() }
类似于如何在需要类型的任何地方使用匿名结构:
Run Code Online (Sandbox Code Playgroud)func f(a struct{Foo int; Bar string}) { fmt.Println(a.Foo) fmt.Println(a.Bar) }
空接口恰好匹配所有类型,因为所有类型至少有零个方法。如果您想保持一致/不想引入特殊情况,则
删除意味着从语言中删除所有界面功能。interface{}