也许我并不完全精通泛型的功能,但是空接口interface{}与泛型有什么不同,特别是如果我们能够使用反射或类型切换的话?人们总是提到Go没有泛型,但是interface{}似乎可以与Java中的<T>相媲美.

推荐答案

如果您来自Java,那么空接口(interface{})实际上更接近于在Java中使用Object个变量,而不是泛型.

可以将任何内容分配给interface{}(就像Java中的Object变量一样).

但是,如果您想要使用存储在那里的实际类型(与Java中需要处理Object个变量相同),则应该"强制转换"或"类型断言".

Java中的泛型非常不同,因为它们允许您在编译时保持类型判断.不同之处在于,如果使用泛型,就不需要使用反射或类型切换.

您可以在此处阅读有关Java泛型的更多信息:

https://docs.oracle.com/javase/tutorial/java/generics/

然后按照这里的Go教程的后续两三个步骤进行操作,以了解有关空界面如何工作的更多信息:

https://tour.golang.org/methods/14

Go相关问答推荐

获取k8s群集作用域运算符的命名空间

如何使用我的 struct 化日志(log)记录格式使人panic ?

Golang文本/模板序列范围

MaybeReadByte对通道的使用如何在Go中提供随机行为?

golang testscript .txtar 语法,用于 stderr 或 stdout 中包含的文本

如何将已知类型转换为指向switch 中类型参数的指针?

当客户端同时是服务器时,需要什么 mTLS 证书?

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

我如何使用 TOML fixtures 在使用 Go Buffalo 框架的开发环境中为我的数据库 seeder ?

如何过滤来自 fsnotify 的重复系统消息

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

Dockerfile 问题 - 为什么找不到二进制 dlv - 没有这样的文件或目录

为什么在单独的 go routine 中需要 wg.Wait() 和 close() ?

Golang Getrlimit 返回与 ulimit 不同的值

github.com/rs/zerolog 字段的延迟判断

即使一个测试用例失败,如何运行所有测试用例

Ginkgo/Gomega panic 测试失败

不理解切片和指针

如何从应用程序调用谷歌云身份 API

Golang 中的无实体函数