也许我对泛型的威力并不是很了解,但空接口 interface{}
和泛型有什么不同,特别是如果我们能够使用反射或类型开关?人们总是提到Go没有泛型,但是 interface{}
看起来可以胜任与Java中的 <T>
相似的工作。
interface{}
)实际上比泛型更接近于在Java中使用Object
变量。
你可以给一个interface{}
分配任何内容(就像在Java中执行Object
变量一样)。
但是,如果要使用存储在其中的实际类型,您应该"转换"或"type assert"回去(与在Java中执行Object
变量相同)。
Java中的泛型非常不同,因为它们允许您在编译时保持类型检查。这个差异就在于如果使用泛型,您不需要借助反射或类型切换。
您可以在此处阅读有关Java泛型的更多信息:
https://docs.oracle.com/javase/tutorial/java/generics/
然后,请跟随此处和下面2或3步骤以了解如何使用空接口:
https://tour.golang.org/methods/14
interface{}
和其他语言中的泛型之间的理论差异。从Go 1.18开始,Go拥有了自己的参数多态实现。如果您对此感兴趣,请参见:任意/接口{}作为约束与参数类型之间的区别? - blackgreen