泛型真的那么厉害吗?

对泛型的不成熟理解

观点

泛型可有可无(有就用没有也无所谓), 为啥还成了 Go 2.0 三大问题之一.
这种小事情值得被拿出来说?

背景

学习之路上, 不明白所以提问, 并不是强调泛型没用大家都别用, 而是我的疑惑.
在 java 中, 使用泛型的时候确实带来很多便捷的帮助
泛型对于我来说主要有两点好处

  • 便捷 (Go 的话多封装一些断言也可以哇)
  • 代码易读 (通过泛型知道现在使用的对象是谁)

为什么我会有这样的理解?

看看别人如何描述泛型?
123

interface{} 不就能解决吗?
然后通过断言类型

func TestInterface( value  interface{} )  {
     fmt.Printf("%t", value)
}

所以我理解 泛型的目的就是避免使用大量 类型断言?

听说会降低启动性能? 这都不是最重要的

总结疑惑

为啥泛型成了 Go 2.0 三大问题之一! 这点小事情还搞成大问题了

根据大佬们热心的回答贴上自己的见解

泛型是在编译期做的事情, 使用类型断言会消耗一点性能
有泛型的话就是将 编译期的性能损耗替换了运行时的类型断言性能损耗, 所以使用泛型是有益的?
那为啥 Go 官方一开始不加呢? c 语言的作者们不知道吗? 这个问题点到即止. 还是了解的不够, 再去看看相关知识

qinhan
最佳答案

断言是有消耗的( https://qinhan.site/2020/04/09/go-type-tra... ) 如果是有泛型的话,在编译阶段进行替换,就没有上述的消耗,一些对于性能有要求的人对这个有追求。 此外我个人觉得虽然泛型会让代码的可读性降低,但是对于代码量上会有一定的减少,看个人喜爱吧,他有也可以不用

4年前 评论
go (楼主) 4年前
讨论数量: 4
taadis

每个人有每个的理解,有一批喜欢用泛型的人,还有一批从众的人, 让 Go 不得不考虑泛型.

4年前 评论
go (楼主) 4年前
qinhan

断言是有消耗的( https://qinhan.site/2020/04/09/go-type-tra... ) 如果是有泛型的话,在编译阶段进行替换,就没有上述的消耗,一些对于性能有要求的人对这个有追求。 此外我个人觉得虽然泛型会让代码的可读性降低,但是对于代码量上会有一定的减少,看个人喜爱吧,他有也可以不用

4年前 评论
go (楼主) 4年前

可读性低。。。

4年前 评论

其实没有泛型的话一样也可以写出代码,但是有了泛型之后面对多种不同类型就会处理得更优雅.而且Go不允许函数重名这个也很蛋疼...

4年前 评论
go (楼主) 4年前
dongfenglong 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!