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
AWS LAMBDA Tutorial# AWS LAMBDA tutorialspoint SIMPLY EASY LEARNING www.tutorialspoint.com https://twitter.com/tutorialspoint ## About the Tutorial AWS Lambda is a service which computes the code without any server. basics of AWS Lambda and its programming concepts in simple and easy way. This tutorial will give you enough understanding on various functionalities of AWS Services to be used with AWS Lambda with illustrative illustrative examples. ## Prerequisites To work with AWS Lambda, you need a login in AWS. The details on how to get free login is discussed in tutorial. AWS Lambda supports languages like NodeJS, Java, Python, C#0 码力 | 393 页 | 13.45 MB | 2 年前3
Back to Basics: Lambda ExpressionsBasics Lambda Expressions Barbara Geller & Ansel Sermersheim CppCon September 2020 ## I ntroduction • Prologue • History • Function Pointer • Function Object • Definition of a Lambda Expression Clause • Generalized Capture • This • Full Syntax as of C++20 • What is the Big Deal • Generic Lambda ## Prologue ## • Credentials ☐ every library and application is open source ☐ development using CsLibGuarded ☑ library for managing access to data shared between threads ## Lambda Expressions ## • History ○ $ \lambda $ calculus is a branch of mathematics ■ introduced in the 1930’s to prove if0 码力 | 48 页 | 175.89 KB | 1 年前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
Back to Basics: Lambdascriterion: std::sort(coll.begin(), coll.end(), lessPerson); // elements to sort lessPerson); Lambda as Sorting Criterion (since C++11) class Person { public: std::string firstname() const; '\n'; } josuttis 2021 by josuttis.com josuttis | eckstein IT communication ## Lambdas ## • Lambda: Function defined on the fly Output: odd elements: 6 first odd elem: 15 std::vectorcoll{0 elem: " << *pos << '\n'; } josuttis | eckstein IT communication Lambda: Function object defined on the fly Output: odd elements: 6 first odd elem: 15 std::vector0 码力 | 17 页 | 935.72 KB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第九课 接口
5. default() -> Self 6. } ## • 月兔中的接口是结构化的 ◦ 无需声明为特定的接口实现方法,类型本身实现方法即可 ## 接口 Trait • 我们可以在泛型的参数上添加接口的要求 ☐ 限制参数的类型: <类型参数> : <接口> ☐ 在函数中使用接口定义的方法: <类型参数>::<方法名> 1. fn0 码力 | 16 页 | 346.04 KB | 2 年前3
TiDB 开源分布式关系型数据库# TiDB 开源分布式关系型数据库 TiDB PRODUCT PORTFOLIO & VERTICAL CASE STUDY  












