在 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{}
- 1 回答
- 0 关注
- 333 浏览
添加回答
举报
0/150
提交
取消