2.1.6 谈谈 Go 泛型CN 谈谈 Go 泛型 鸟窝(晁岳攀) 微服务框架 rpcx 作者 个人介绍 微服务框架rpcx作者,百度资深工程师 《100个Go语言错误及避坑指南》,译者之一。即将出版 《深入理解Go并发编程》,作者。封面占位用。即将出版 ’ alt=‘OCR图片’/> 回顾 Go 泛型 01 Go 泛型陷阱 02 最佳实践 03 改造 Go 项目 04 Top N Go 泛型库 05 第一部分 第一部分 回顾 Go 泛型 ’ alt=‘OCR图片’/> 泛型类型和泛型函数 泛型类型 类型参数 类型约束 type List[T any] struct { next *List[T] value T } 泛型函数 类型参数 类型约束 func min[T ~int|~float64] (x, y T) T { if x < y { return return x } return y } 泛型类型的方法 func (l *List[T]) Len() int { … } 泛型方法? func (l *List) Len[V any] () int { … } ’ alt=‘OCR图片’/> 类型约束和接口0 码力 | 52 页 | 3.09 MB | 1 月前3
1.2.3 Go 泛型设计G CN Go泛型设计 赵柯 QQ音乐 Go泛型发展史 01 Go泛型设计实现提案 02 Go泛型底层实现原理 03 总结 04 第一部分 Go泛型发展史 ’ alt=‘OCR图片’/> 什么是泛型? 1967年,克里斯托弗·斯特雷奇在《Fundamental Concepts in Programming Languages》提出了两个概念: 特设多态(ad-hoc): void print(string type unknown struct {} func (u unknown) walk() {} func (u unknown) quack() {} ’ alt=‘OCR图片’/> 泛型困局 编码速度 or 编译速度 or 运行速度? C++(slow compiler) ’ alt=‘OCR图片’/> 早期提案 - Type Functions type Lesser(t) interface return a } return b } MyVector(t)(v)看上去像是两次函数调用 type关键字使用混乱 部分场景实现困难: 支持通用运算符 支持泛型方法 ’ alt=‘OCR图片’/> 早期提案-Generalized Types(广义类型) gen [t] type Lesser(t) interface { Less(t) bool0 码力 | 35 页 | 1.31 MB | 1 月前3
Go 1.18 中的泛型### Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 ## 语法和使用 ## 什么时候需要泛型? 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的类型: type T interface { Add(T) T } func Sum(elem s ...T) (sum T) { // T 可以是任何实现 Add() (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 for i := range elements { sum += elem[i] } return } 使用泛型的根本目的是:类型安全的参数传递,以及对实现的类型进行抽象  {} // OK 为什么第二个 bar 不会报错? ## 抽象能力 泛型没有任何运行时的机制,所以关于泛型的组件只发生在编译时期 对于下面的接口而言,无法作为普通参数使用: func Foo[T any]( ) {} x := Foo // ERROR: cannot use0 码力 | 45 页 | 501.50 KB | 2 年前3
JAVA 应用与开发 - 泛型应用与开发 泛 型 让我们愉快的 Coding 起来吧... 王晓东 中国海洋大学信息学院计算机系 October 5, 2018  ## 学习目标 ■ 理解泛型的概念,掌握其基本应用 ▶ 集合框架中的泛型 ▶ 泛型的向后兼容性 ■ 掌握自定义泛型类和泛型方法 ▶ 理解类型参数 ▶ 理解差异性并能够定义自己的泛型类和泛型方法 ▶ 受限制的类型参数 ■ 学会处理泛型类型,包括使用通配符实现泛型容器遍历和操作 ## 大纲 1 泛型概念 2 泛型类与泛型方法 3 处理泛型类型 ## 泛型概念 ## 什么是泛型 ## 泛型(Generics) 泛型机制自 JDK 5.0 开始引入,其实质是将原本确定不变的数据类型参数化。 作为对原有 Java 类型体系的扩充,使用泛型可以提高 Java 应用程序的类型安全、可维护性和可靠性。 ## 什么是泛型 ## ☑ 集合框架中的数据造型问题 传统的集合容器为了提供广泛的适用性,会将所有加入其中的元素当作 Object 类型来处理。基于此原因,在实际使用时,我们必须将从集合中取出的元素值再强制转换(造型)为所期望的类型。 ## 什么是泛型 ## 集合框架中的数据造型问题 传统0 码力 | 35 页 | 587.40 KB | 2 年前3
Back to Basics: Design Patterns0 码力 | 96 页 | 2.10 MB | 1 年前3
TiDB 开源分布式关系型数据库# TiDB 开源分布式关系型数据库 TiDB PRODUCT PORTFOLIO & VERTICAL CASE STUDY   附录.....176 关键键.....176 Draw Max.....176 http://www.edrawsoft.com ## 亿 图图示——综合型专业绘图软件  亿图图示为用户提供大量 82/p5_3.jpg) ## 亿 图图示更新功能 • 新增浮动工具栏 - 新增导入 CAD(支持 dwg 和 dxf 格式,2000-2013 版本) ## 为什么选择亿图图示 - 综合型绘图软件:亿图图示可以帮助快速制作流程图、组织结构图、思维导图、网络图、工程图等专业图形图表。 - 便捷的拖放功能:只需从符号库里拖拽图形至绘图页面,就可以做出漂亮的图形。 • 丰富的内置主题:可0 码力 | 180 页 | 5.99 MB | 2 年前3
MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数现代编程思想 # 泛型与高阶函数 Hongbo Zhang ## 设计良好的抽象 - 软件工程中,我们要设计良好的抽象 - 当代码多次重复出现 ☐ 当抽出的逻辑具有合适的语义 - 编程语言为我们提供了各种抽象的手段 - 函数、泛型、高阶函数、接口..... ## 泛型函数与泛型数据 ## 堆栈 - 栈是一个由一系列对象组成的一个集合,这些对象的插入和删除遵循后进先出原则(Last 12. } ## • 我们希望存储很多很多类型在堆栈中 ☐ 每个类型都要定义一个对应的堆栈吗? ☐ IntStack 和 StringStack 似乎结构一模一样? ## 泛型数据结构与泛型函数 ## - 泛型数据结构与泛型函数以类型为参数,构建更抽象的结构 1. enum Stack[T] { 2. Empty 3. NonEmpty(T, Stack[T]) 4. } 11. } 12. } • 将 T 替换为 Int 或 String 即相当于 IntStack 与 StringStack ## 泛型数据结构与泛型函数 • 我们用 <类型1>,<类型2>, $ \ldots $ 来定义泛型的类型参数 enum Stack[T]{ Empty; NonEmpty(T, Stack[T]) } o struct Pair[A, B]{0 码力 | 27 页 | 2.56 MB | 2 年前3
MoonBit月兔编程语言 现代编程思想 第九课 接口
default() -> Self 6. } ## • 月兔中的接口是结构化的 ◦ 无需声明为特定的接口实现方法,类型本身实现方法即可 ## 接口 Trait • 我们可以在泛型的参数上添加接口的要求 ☐ 限制参数的类型: <类型参数> : <接口> ☐ 在函数中使用接口定义的方法: <类型参数>::<方法名> 1. fn0 码力 | 16 页 | 346.04 KB | 2 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













