由于泛型最近在 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")
}
Run Code Online (Sandbox Code Playgroud)
两种实现都有效。但是,如果我尝试nil使用any-version 进行打印,我会收到编译时错误:
无法推断 T。
https://go.dev/play/p/0gmU4rhhaOP
nil如果我尝试使用-version进行打印,我不会收到此错误interface{}。
那么它的用例是什么any?与简单地使用相比,它何时会带来哪些好处interface{}?
我要求提供一个具体的示例,其中一种实现客观上比另一种实现更合适和/或存在可以评估的特定好处。