Golang 泛型他来了!
官方发布了几份草案,其中 go2 的泛型可以前往 https://go2goplay.golang.org 体验
官方发布了几份草案,其中 go2 的泛型可以前往 https://go2goplay.golang.org 体验
而且他们的思路也很正确,尽量把复杂性留在 “写” 泛型那边,而在 “用” 泛型那边则尽可能简化,这个设计原则非常棒。
比如,官方的例子 Print 函数使用了泛型,它是这样使用的:
Print([]string{“Hello, “, “world”}) //输出 Hello, world
Print([]int{3, 4, 5}) //输出 345
如果不管 Print 是怎么实现的,只看它是怎么使用的,就会觉得非常简洁,而且兼容 Go 1 。
> 而且他们的思路也很正确,尽量把复杂性留在 “写” 泛型那边,而在 “用” 泛型那边则尽可能简化
用这边怎么设计都会很简化。关键看能不能把 “写” 泛型也给简化了,否则不是一个好设计。
func main() {
Print(Map(func(a int64) string { return strconv.FormatInt(a, 16) }, []int64{42, 100, 200}))
}
还可以,处理数据总算能写的简洁点了
这括号也太多了吧
golang 其他为人诟病的地方(比如错误处理,比如黑魔法太少),大约可归类为习惯问题,if err != nil 只是写法不一样,习惯之后,也足够用了,何况 goland 对于未处理的错误会标黄提示。
但是没有泛型这个实在不能忍,不仅代码丑陋,而且缺少类型提示与编译期错误检查(如果使用 interface{}、反射来曲线救国),运行时性能损失倒无所谓,绝大多数 golang 项目性能绝非瓶颈。
golang 官方从一开始就说没有泛型只是不好实现(怕拖慢编译速度),而不是彻底不考虑未来加入泛型的可能。
根据[golang 官方的开发者调查]( https://blog.golang.org/survey2019-results):
> Among the 25% of respondents who said Go lacks language features they need, 79% pointed to generics as a critical missing feature
对于语言特性缺失的调查,其中 79%都指向缺少泛型