2.1.6 谈谈 Go 泛型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 x } return y } 泛型类型的方法 func (l *List[T]) Len() int { … } 泛型方法? func (l *List) Len[V any] () int { … } ’ alt=‘OCR图片’/> 类型约束和接口 <go 1.18="" interface:="" an="" interface="" type=""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(stringT Add(T a, T b) { return a + b; } 子类型多态,行多态…: ’ alt=‘OCR图片’/> Go中的interface 鸭子定律: 当看到一个动物走起来像鸭子、游起来像鸭子、叫起来也像鸭子,那么这只动物就可以被称为鸭子。 type Duck interface { walk() quack() 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)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 } 使用泛型的根本目的是:类型安全的参数传递,以及对实现的类型进行抽象 : func DeepCopy[T any](src T) (dst T) 等等参见 github.com/golang-design/go2generics ## 类型参数的声明和化简 // Pick returns a randomly selected element in a given slice. func Pick[S0 码力 | 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
Golang 101(Go语言101 中文版) v1.21.a# Go语言101 $ -=v1.21.a-d5979d9= $   ! fbc393c0e28f665e51efc45125/p1_4.jpg) 老貘 著 ## 目录 第0章:关于《Go语言101》-为什么写这本书 第1章:致谢 第2章:Go语言简介-为什么Go语言值得学习 - 第3章:Go官方工具链 - 如何编译和运行Go程序 • Go编程入门 第4章:程序源代码基本元素介绍 。第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 。第7 第13章:协程、延迟函数调用、以及恐慌和恢复 • Go类型系统 第14章:Go类型系统概述-精通Go编程必读 。第15章:指针 。第16章:结构体 。第17章:值部-为了更容易和更深刻地理解Go中的各种值 。第18章:数组、切片和映射 - Go中的首要容器类型 。第19章:字符串 。第20章:函数 - 函数类型和函数值,以及变长参数个数函数 。第21章:通道 - Go特色的并发同步方式 第22章:方法0 码力 | 591 页 | 21.40 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  Go入门指南 书栈(BookStack.CN) ## 目录 致谢 阅前必读 内容介绍 前言 第1章:Go 语言的起源,发展与普及 1.1 起源与发展 1.2 语言的主要特性与发展的环境和影响因素 第2章:安装与运行环境 2.1 平台与架构 2.2 Go 环境变量 2.3 在 Linux 上安装 Go 2.4 在 Mac OS OS X 上安装 Go 2.5 在 Windows 上安装 Go 2.6 安装目录清单 2.7 Go 运行时(runtime) 2.8 Go 解释器 第3章:编辑器、集成开发环境与其它工具 3.1 Go 开发环境的基本要求 3.2 编辑器和集成开发环境 3.3 调试器 3.4 构建并运行 Go 程序 3.5 格式化代码 3.6 生成代码文档 3 3.7 其它工具 3.8 Go 性能说明 3.9 与其它语言进行交互 第4章:基本结构和基本数据类型 4.1 文件名、关键字与标识符 4.2 Go 程序的基本结构和要素 4.3 常量 4.4 变量 4.5 基本类型和运算符 4.6 字符串 4.7 strings 和 strconv 包 4.8 时间和日期 4.9 指针 第5章:控制结构0 码力 | 466 页 | 4.44 MB | 2 年前3
Go 入门指南(The way to Go)1986bf1/p1_3.jpg) The Way to Go Go入门指南 Ivo Balbaert 著 陈佳桦 译 ## 前言 原文出处:https://github.com/Unknwon/the-way-to-go_ZH_CN ## 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣 对于学习 Go 编程语言的爱好者来说,这本书无疑是最适合你的一本书籍,这里包 开发出的软件能够很好地在现代的多核计算机上工作 - 开发出的软件能够很好地在网络环境下工作 • 使人们能够享受软件开发的过程 Go 语言就在这样的环境下诞生了,它让人感觉像是 Python 或 Ruby 这样的动态语言,但却又拥有像 C 或者 Java 这类语言的高性能和安全性。 Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 来支持并发和并行编程。 这本书是为那些想要学习 Go 这门全新的,迷人的和充满希望的编程语言的开发者量身定做的。当然,你在学习 Go 语言之前需要具备一些关于编程的基础知识和经验,并且拥有合适的学习环境,但你并不需要对 C 或者 Java 或其它类似的语言有非常深入的了解。 对于那些熟悉 C 或者面向对象编程语言的开发者,我们将会在本书中用 Go 和一些编程语言的相关概念进行比较(书中会使用大家所熟知的缩写0 码力 | 380 页 | 2.97 MB | 2 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













