Frequently Asked Questions :Go为什么没有泛型?

Go为什么没有泛型

详细可以见issue:https://github.com/golang/go/issues/43651 ,这个issue已经被认同,不出意外的话在Go的1.18版本就能支持泛型了。

Go希望被设计为一个能够被容易持续运行很久的服务端语言(详细可参考这篇文章https://talks.golang.org/2012/splash.article),因此设计的时候聚焦于可拓展性、可阅读性和并发性上,因此当时看来多态编程并不是必不可少的,所以就忽略了。

现在语言原来越成熟完善,可以开始考虑泛型的设计。但是有一些注意事项要留意。

泛型的确是很方便,但是背后的代价是复杂的类型系统和运行时设计。鱼与熊掌不可兼得,我们还没思考到比较均衡的方案,但是我们在持续思考。

于此同时,Go内置的map和slice,这些容器中的元素可以是interface{}接口(使用显式地拆箱)。这其实和泛型类似。

下面这个话题还在持续讨论,你可以看看之前一些Go实现泛型的失败尝试https://github.com/golang/go/issues/15292。

PS: 泛型是什么呢?学过Java的可以比较容易知道,比如hashMap中的元素就是泛型,在没有设定的时,它可以是任意值,但是一旦在我们new的时候,指定了泛型的具体类型,那么它就不能变了。这一点Go就不行,虽然上面有说道interface做到了类似泛型的功能,但是相同的new一个map的时候,Go不用指定具体是什么类型,而在使用的时候,必须要加上一堆断言assert,十分臃肿麻烦。

1. scalability 可拓展性
2. essential 必不可少的
3. caveat 注意事项
4. explicit 清晰地,显式地
5. buildi-in 内置的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值