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) return a } return b } MyVector(t)(v)看上去像是两次函数调用 type关键字使用混乱 部分场景实现困难: 支持通用运算符 支持泛型方法 ’ alt=‘OCR图片’/> 早期提案-Generalized Types(广义类型) gen [t] type Lesser(t) interface { Less(t)0 码力 | 35 页 | 1.31 MB | 3 月前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
MoonBit月兔编程语言 现代编程思想 第六课 泛型与高阶函数现代编程思想 # 泛型与高阶函数 Hongbo Zhang ## 设计良好的抽象 - 软件工程中,我们要设计良好的抽象 - 当代码多次重复出现 ☐ 当抽出的逻辑具有合适的语义 - 编程语言为我们提供了各种抽象的手段 - 函数、泛型、高阶函数、接口..... ## 泛型函数与泛型数据 ## 堆栈 - 栈是一个由一系列对象组成的一个集合,这些对象的插入和删除遵循后进先出原则(Last 12. } ## • 我们希望存储很多很多类型在堆栈中 ☐ 每个类型都要定义一个对应的堆栈吗? ☐ IntStack 和 StringStack 似乎结构一模一样? ## 泛型数据结构与泛型函数 ## - 泛型数据结构与泛型函数以类型为参数,构建更抽象的结构 1. enum Stack[T] { 2. Empty 3. NonEmpty(T, Stack[T]) 4. } 5 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月兔编程语言 现代编程思想 第九课 接口
5. default() -> Self 6. } ## • 月兔中的接口是结构化的 ◦ 无需声明为特定的接口实现方法,类型本身实现方法即可 ## 接口 Trait • 我们可以在泛型的参数上添加接口的要求 ☐ 限制参数的类型: <类型参数> : <接口> ☐ 在函数中使用接口定义的方法: <类型参数>::<方法名> 1. fn0 码力 | 16 页 | 346.04 KB | 2 年前3
TiDB 开源分布式关系型数据库# TiDB 开源分布式关系型数据库 TiDB PRODUCT PORTFOLIO & VERTICAL CASE STUDY   v1.21.aGo特色的并发同步方式 第22章:方法 。第23章:接口-通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌-不同于继承的类型扩展方式 第25章:非类型安全指针 第26章:泛型-如何使用和解读组合类型 。第27章:反射 - reflect 标准库包中提供的反射支持 ## • 一些专题 第28章:代码断行规则 。第29章:更多关于延迟函数调用的知识点 。第30章:一些恐慌/恢复用例 间。 ## 有什么其它值得一提吗? 本书不涵盖自定义泛型相关内容。请阅读《Go自定义泛型101》 (https://gfw.gol01.org/generics/101.html) 一书来了解使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的类型参数类型被特意忽略掉了。也就是说,本书不考虑自定义泛型中的情形。 本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和Go101 org网站不断增容和维护的动力。 (请搜索关注微信公众号 “Go 101” 或者访问 github.com/golang101/golang101 获取本书最新版) ## Go语言简介 Go是一门编译型的和静态的编程语言。Go诞生于谷歌研究院。Go的核心设计成员中包括很多有着数十年编程语言研究领域经验的研究者。 Go有很多特性,有一些是独特的,有一些借鉴于一些其它编程语言: • 内置并发编程支持:0 码力 | 591 页 | 21.40 MB | 2 年前3
Comprehensive Rust(繁体中文)Rust? 22 4.2 Rust 的優點 22 4.3 Playground 23 5 型別和值 24 5.1 Hello, World 24 5.2 變數 25 5.3 值 25 5.4 算術 26 5.5 宇串 (String) 26 5.6 型別推斷 27 5.7 練習: 費波那契數列 27 5.7.1 解決方案 28 6 基本的控制流程概念 44 9.2 迷途參照 45 9.3 練習:幾何圖形 45 9.3.1 解決方案 46 10 使用者定義的型別 47 10.1 結構體 47 10.2 元組結構體 48 10.3 列舉 49 10.4 靜態和常數 50 10.5 型別別名 52 10.6 練習:電梯事件 52 10.6.1 解決方案 53 III 第 2 天:上午 56 70 13.4 練習:泛型 Logger ..... 70 13.4.1 解決方案 ..... 71 14 泛型 ..... 73 14.1 Extern 函式 ..... 73 14.2 泛型資料型別 ..... 74 14.3 特徵界限 ..... 74 14.4 impl Trait ..... 75 14.5 練習:泛型 min ..... 760 码力 | 358 页 | 1.41 MB | 1 年前3
Mypy 1.10.0+dev Documentation0 码力 | 318 页 | 270.84 KB | 2 年前3
亿图图示 V10 用户手册 综合型专业绘图软件Z图图示 V10 j户手册 作合型专几估属藉作 @2004 - 2020 EdrawSoft All right reserved. Edraw and Edraw logo are registered trademarks of EdrawSoft, 字 edraw max 目录 龙必图元的产另扰执 放属因更新功能ee 为ff各秦帮龙必 放必展托版天运厅要泡… 第一章; 开始使用亿图 atp:Jywwwedrawsofen Page 4 of 162 字 edraw max 人龙属帮大更新功通 。 支持将所创作的图形存储到云端。 为Mf和雍表龙属 。 综合型的绘图软件: 亿图图示可以随时随地为用户提供帮助。 。 海量的矢量图形符号: 帮助快速制作流程图、组织结构图、网络图等。 。 便捷的拖放功能: 只需从符号库里拖搜图形至绘图页面,就可以做出漂亮的图形。 铅笔工具可以绘制开放与封闭的路径图形,就像在纸上用铅笔绘画一样,还可以快速素描或创造出 手绘的面貌。如果需要修改绘制的图形路径,可以马上修改。 了IC人上人 人 六 远池站笔工具 | 如笔共” 移动民点添加铺点。山险展点。转岳点尖型 通过铅笔工具设置锚点,不需要确定定位点的初始位置,你可以在图形路径完成后调节锚点。由路 径的长度和复杂性确定锚点数。 AZ 人 绘制自由形式路径图形 1 在“符号”莱单栏中,选择“铅笔工具”,这时光标会变成一个铅笔的0 码力 | 162 页 | 5.86 MB | 2 年前3
共 761 条
- 1
- 2
- 3
- 4
- 5
- 6
- 77













