由于泛型最近在 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{}?
我要求提供一个具体的示例,其中一种实现客观上比另一种实现更合适和/或存在可以评估的特定好处。
由于我来自Java并且是Golang的新手,我将尝试用Java解释我想要的东西.
interface Car { }
class MyCarA implements Car {
int specificToA
}
class MyCarB implements Car {
int specificToB
}
Run Code Online (Sandbox Code Playgroud)
我认为这样的界面(如Car)在Java中称为标记界面.它只是表明编译器必要的抽象.
我怎么能在Golang中这样做?
我有
type MyCarA struct {
specificToA int
}
type MyCarB struct {
specificToB int
}
Run Code Online (Sandbox Code Playgroud)
我现在如何概括这些结构?它应该是一个接口还是另一个结构?