gpt4 book ai didi

go - Go 1.18 中的 "any"类型是什么?

转载 作者:行者123 更新时间:2023-12-02 01:38:39 33 4
gpt4 key购买 nike

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

这将在回调中将 kv 作为字符串,而无需自己进行类型转换?

最佳答案

any 是一个新的 predeclared identifierinterface{} 的类型别名。

来自issue 49884 , CL 368254commit 2580d0e .

问题提到了关于interface{}/any:

It's not a special design, but a logical consequence of Go's type declaration syntax.

You can use anonymous interfaces with more than zero methods:

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

Analogous to how you can use anonymous structs anywhere a type is expected:

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

An empty interface just happens to match all types because all types have at least zero methods.
Removing interface{} would mean removing all interface functionality from the language if you want to stay consistent / don't want to introduce a special case.

关于go - Go 1.18 中的 "any"类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71964357/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com