泛型的疑问

来源:19-1 体会Go语言的设计

鱼右

2020-02-11

老师,你好
我看了老师的java课程,那里说到了泛型,我看了一下用Go中的空接口,或者反射都可以实现对应的功能,为什么还要用泛型呢?除了用空接口,反射性能不好的这个原因外,还能有其他的现在Go语言不好实现的嘛, 关于泛型,谢谢老师

写回答

1回答

ccmouse

2020-02-13

泛型可以约束参数的类型。

比如Java里面,我们一个List<String> lst,我们就只能给它加String,如果写lst.add(3),就会编译错误。而这个List,我们实现一次,就可以支持List<String>, List<Integer>,等等各种类型的List。

在Go里面我们如果要自己实现List,没有泛型的情况下只能把容器里面的元素定义为interface{},Add函数定义为Add(v interface{})。我们没法在编译时约束参数类型,只能在运行时检查。

不过Go语言的内建容器类型比如slice, map本身内部实现了泛型。比如[]int我们不能去append一个string。

0
1
鱼右
非常感谢!
2020-09-11
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程