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

xrf*_*ang 4 generics go any

在 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{}

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

该问题提到了interface{}/ any

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

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

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)
}
Run Code Online (Sandbox Code Playgroud)

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