由于最近在 Go 1.18 中发布了泛型,我已经开始学习它们了。我通常能理解这个概念,因为我过去有一些 Java 经验。但我没有得到一些实施细节。
例如:什么时候更适合使用any而不是interface{}?这是一个例子:
func printInterface(foo interface{}) {
fmt.Printf("%v\n", foo)
}
func printAny[T any](foo T) {
fmt.Printf("%v\n", foo)
}
func (suite *TestSuite) TestString() {
printInterface("foo")
printAny("foo")
}
两种实现都有效。但是,如果我尝试nil使用any-version 进行打印,则会出现编译时错误:
无法推断 T。
https://go.dev/play/p/0gmU4rhhaOP
如果我尝试nil使用interface{}-version 打印,我将不会收到此错误。
那么用例是any什么?与简单使用相比,它何时以及带来哪些好处interface{}?
我要求提供一个具体示例,其中一种实现客观上比另一种更合适和/或存在可以评估的特定好处。
茅侃侃
GCT1015
相关分类