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) 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 | 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
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. fn derive(<接口>) 即可 1. struct BoxedInt { value : Int } derive(Default, Eq, Compare, Debug) - 需要数据结构内部的数据同样实现接口 ## 表:利用接口实现 ## • 一个表是键值对的集合 对于每一个键存在一个对应值 ☐ 例:{ 0 -> "a", 5 -> "Hello"0 码力 | 16 页 | 346.04 KB | 2 年前3
The Zig Programming Language 0.2.0 Documentation0 码力 | 117 页 | 2.84 MB | 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
共 904 条
- 1
- 2
- 3
- 4
- 5
- 6
- 91













