随着仿制药最近在Go 1.18中发布,我开始学习它们.我一般都能理解这个概念,因为我有一些过go 的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")
}
这两种实现都有效.然而,如果我试图用any
版本打印nil
,我会得到一个编译时错误:
无法推断T.
https://go.dev/play/p/0gmU4rhhaOP
如果我试着用interface{}
版本打印nil
,我不会得到这个错误.
那么any
的用例是什么呢?与简单使用interface{}
相比,它在什么时候带来了哪些好处?
我要求提供一个specific个示例,其中一个实现在客观上比另一个更合适,并且/或者可以判断specific个好处.