39 | 驯服泛型:了解类型参数
Tony Bai
该思维导图由 AI 生成,仅供参考
你好,我是 Tony Bai。
在专栏的结束语中,我曾承诺要补充“泛型篇”,帮助你入门 Go 泛型语法。在经历了 2022 年 3 月 Go 1.18 版本的泛型落地以及 8 月份 Go 1.19 对泛型问题的一轮修复后,我认为是时候开讲 Go 泛型篇了。
不过在正式开讲之前,我还有一些友情提示:和支持泛型的主流编程语言之间的泛型设计与实现存在差异一样,Go 的泛型与其他主流编程语言的泛型也是不同的。我希望你在学习之前,先看一下 Go 泛型设计方案已经明确不支持的若干特性,比如:
不支持泛型特化(specialization),即不支持编写一个泛型函数针对某个具体类型的特殊版本;
不支持元编程(metaprogramming),即不支持编写在编译时执行的代码来生成在运行时执行的代码;
不支持操作符方法(operator method),即只能用普通的方法(method)操作类型实例(比如:getIndex(k)),而不能将操作符视为方法并自定义其实现,比如一个容器类型的下标访问 c[k];
不支持变长的类型参数(type parameters);
… …
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Go语言泛型的基本语法及应用是本文的重点内容。作者通过示例展示了使用any类型和类型断言实现通用函数的不足之处,并介绍了Go 1.18版本中引入的泛型语法,展示了如何使用类型参数来实现通用函数。通过对比性能测试,作者展示了泛型版本函数相对于使用any类型的函数在性能上的优势。文章还强调了Go泛型适合解决容器类型算法的特点,并指出泛型实现使得容器算法与容器内元素类型彻底解耦。此外,文章还介绍了泛型函数的实例化过程和泛型类型的声明和使用方法,为读者提供了全面的泛型知识。在泛型类型的支持方面,文章提到了类型别名和类型嵌入的情况,并对泛型方法的定义和使用进行了详细讲解。总的来说,本文为读者提供了一个深入了解Go泛型基本语法及应用的入门指南,适合对Go泛型感兴趣的读者阅读学习。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
《Tony Bai · Go 语言第一课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 那时刻go语言范型不使用 <>,我想到一个点,是不是解析的时候 容易与大于 或者小于 符号混淆?
作者回复: 👍
2022-11-10归属地:北京33 - 文武木子沙发🛋️
作者回复: 👍
2022-11-04归属地:北京3 - 左耳朵东既然泛型函数的实例化是在编译阶段做的,实例化生成的也是一个普通函数,怎么压测结果比普通函数要慢呢,不知道哪里多出来的性能损耗?
作者回复: 第41讲有泛型原理的讲解,那里可以找到答案。
2023-07-27归属地:广东2 - 麦子go语言范型不使用 <> 难道和组合有关系,为了统一?类似[]int
作者回复: 不是。是在编译阶段的技术问题,根据go团队说法,如果用<>,则会在编译阶段词法和语法解析的时候,产生无法化解的歧义。
2023-11-27归属地:江苏1 - return白老师一如既往的超高质量,感谢老师的无私奉献。
作者回复: 👍
2022-11-17归属地:北京1 - 一打七还好时不时复习一下老师的课,又等到老师更新了,意外之喜
作者回复: 欢迎常回来看看:)
2022-11-08归属地:北京1 - 罗杰最近打算看看泛型,然后就看到了老师的更新,非常及时。不过,看起来并没有那么容易,老师写的很详细,需要好好消化一下。
作者回复: 哈哈,居然是及时雨:)
2022-11-06归属地:北京1 - Calvin终于等到你,还好你没放弃。😂 白老师的课程一如既往的高质量,这篇文章补充了我很多关于泛型的未知知识点。
作者回复: 👍
2022-11-05归属地:北京1 - 吃橘子的汤圆🐳感谢2023-02-26归属地:河南1
收起评论