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
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 中的泛型
欧长坤
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 use
0 码力 |
45 页 |
501.50 KB
| 2 年前 3
应用与开发 泛 型 让我们愉快的 Coding 起来吧...
王晓东
中国海洋大学信息学院计算机系
October 5, 2018

## 学习目标
■ 理解泛型的概念,掌握其基本应用
▶ 集合框架中的泛型
▶ 泛型的向后兼容性 泛型的向后兼容性
■ 掌握自定义泛型类和泛型方法
▶ 理解类型参数
▶ 理解差异性并能够定义自己的泛型类和泛型方法
▶ 受限制的类型参数
■ 学会处理泛型类型,包括使用通配符实现泛型容器遍历和操作
## 大纲
1 泛型概念
2 泛型类与泛型方法
3 处理泛型类型
## 泛型概念
## 什么是泛型
## 泛型(Generics)
泛型机制自 JDK 5.0 开始引入,其实质是将原本确定不变的数据类型参数化。 作为对原有 Java 类型体系的扩充,使用泛型可以提高 Java 应用程序的类型安全、可维护性和可靠性。
## 什么是泛型
## ☑ 集合框架中的数据造型问题
传统的集合容器为了提供广泛的适用性,会将所有加入其中的元素当作 Object 类型来处理。基于此原因,在实际使用时,我们必须将从集合中取出的元素值再强制转换(造型)为所期望的类型。
## 什么是泛型
## 集合框架中的数据造型问题
传
0 码力 |
35 页 |
587.40 KB
| 2 年前 3
现代编程思想
# 泛型与高阶函数
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
应用与开发 高级类特性 让我们愉快的 Coding 起来吧...
王晓东
中国海洋大学信息学院计算机系
October 9, 2018

## 学习目标
■ 掌握抽象类和接口的概念、特性及定义方法
☑ 理解抽象类和接口的异同和作用 了解嵌套类的分类,掌握嵌套类中静态嵌套类和匿名嵌套类的概念
■ 掌握匿名内部类的特征、继承和接口实现的用法
■ 掌握枚举类型的使用方法
大纲
1 抽象类
2 接口
3 抽象类和接口剖析
4 嵌套类
5 枚举类型
29
## 抽象类
## 什么是抽象类
## 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的。如果一个类中没有包 含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
## 什么是抽象类
## 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同但是本质上相同的具体概念的抽象。
 理解什么是反射机制,通过常见场景认识反射的作用。
2. 掌握
类的加载、连接和初始化概念。
3. 理解
类加载器及
类加载机制。
4. 掌握使用反射生成并操作对象的方法。
|大纲|反射|
类的加载、连接和初始化|
类加载器|使用反射生成并操作对象|本节习题|
|---|---|---|---|---|---|
|大纲||||||
|反射||||||
|
类的加载、连接和初始化||||||
|
类加载器||||||
|使用反射生成并操作对象|||||| >大纲
反射 | 类的加载、连接和初始化 | 类加载器 | 使用反射生成并操作对象 | 本节习题 | | 接下来… |
| 反射 |
| 类的加载、连接和初始化 |
0 码力 |
46 页 |
714.40 KB
| 2 年前 3 ## 机器学习-聚类
黄海广 副教授
2023年04月
## 本章目录
01 无监督学习概述
02 K-means聚类
03 密度聚类和层次聚类
04 聚类的评价指标
### 1. 无监督学习概述
01 无监督学习概述
02 K-means聚类
03 密度聚类和层次聚类
04 聚类的评价指标
### 1. 无监督学习方法概述
## 监督学习和无监督学习的区别
## 数。
## 无监督学习
与此不同的是,在无监督学习中,我们的数据没有附带任何标签y,无监督学习主要分为聚类、降维、关联规则、推荐系统等方面。
### 1. 无监督学习方法概述
## 主要的无监督学习方法
✓ 聚类(Clustering)
✓ 如何将教室里的学生按爱好、身高划分为5类?
✓ 降维(Dimensionality Reduction)
✓ 如何将原高维空间中的数据点映射到低维度的空间中? 无监督学习方法概述
## 聚类
主要算法
K-means、密度聚类、层次聚类
主要应用
市场细分、文档聚类、图像分割、图像压缩、聚类分析、特征学习或者词典学习、确定犯罪易发地区、保险欺诈检测、公共交通数据分析、IT资产集群、客户细分、识别癌症数据、搜索引擎应用、医疗应用、药物活性预测……
### 1. 无监督学习方法概述
## 聚类案例
### 1. 医疗
医生可以使用聚类算法来发现疾病。以甲 0 码力 |
48 页 |
2.59 MB
| 2 年前 3 5. default() -> Self
6. }
## • 月兔中的接口是结构化的
◦ 无需声明为特定的接口实现方法,类型本身实现方法即可
## 接口 Trait
• 我们可以在泛型的参数上添加接口的要求
☐ 限制参数的类型: <类型参数> : <接口>
☐ 在函数中使用接口定义的方法: <类型参数>::<方法名>
1. fn 0 码力 |
16 页 |
346.04 KB
| 2 年前 3 # TiDB 开源分布式关系型数据库 TiDB PRODUCT PORTFOLIO & VERTICAL CASE STUDY

![Image](/uploads/documents/3/d/e/b/3deb0740caa715 创新成果 …… 05
1.3 发展历程 …… 06
1.4 技术标准起草 …… 07
1.5 荣誉 …… 07
1.6 代表用户 …… 08
第二章 TiDB 开源分布式关系型数据库
2.1 产品简介 …… 10
2.2 TiDB 架构图 …… 10
2.3 核心特性 …… 11
2.4 TiFlash 高性能列式分析引擎 …… 12
2.5 TiDB 企业版 产品、解决方案与咨询、技术支持与培训认证服务,致力于为全球行业用户提供稳定高效、安全可靠、开放兼容的新型数据基础设施,解放企业生产力,加速企业数字化转型升级。
由 PingCAP 创立的分布式关系型数据库 TiDB,为企业关键业务打造,具备「分布式强一致性事务、在线弹性水平扩展、故障自恢复的高可用、跨数据中心多活」等企业级核心特性,帮助企业最大化发挥数据价值,充分释放企业增长空间。
目前,PingCAP 0 码力 |
58 页 |
9.51 MB
| 2 年前 3
|