Go 入门指南(The way to Go)在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 4、7、8 章), 控制结构(第 5 章),函数(第 6 章),结构与方法(第 10 章)和接口(第 11 章)。我们会对 Go 语 言的函数式和面向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第 9 章)。 在本书的第三部分,你将会学习到如何处理不同格式的文件(第 12 章)和如何在 Go 语言中巧妙地使用 15 章)。 我们会在本书的第四部分向你展示许多 Go 语言的开发模式和一些编码规范,以及一些非常有用的代码片 段(第 18 章)。在前面章节完成对所有的 Go 语言技巧的学习之后,你将会学习如何构造一个完整 Go 语言项目(第 19 章),然后我们会介绍一些关于 Go 语言在云(Google App Engine)方面的应用(第 20 章)。在本书的最后一章(第 21 章),我们会讨论一些在全世界范围内已经将 C++ 解决的问题的同时,让我的工作变得更加高效。我并不是说 C++ 的存在是一个错误,相反地,我认 为这是历史发展的必然结果。当我深陷在 C 语言这门略微比汇编语言好一点的泥潭时,我坚信任何语言的 构造都不可能支持大型项目的开发。像垃圾回收或并发语言支持这类东西,在当时都是极其荒谬的主意, 根本没有人在乎。C++ 向大型项目开发迈出了重要的第一步,带领我们走进这个广袤无垠的世界。很庆幸 Stroustrup0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)测试多返回值函数的错误 5.3 switch 结构 5.4 for 结构 5.5 Break 与 continue 5.6 标签与 goto 第6章:函数(function) 6.1 介绍 6.2 函数参数与返回值 6.3 传递变长参数 6.4 defer 和追踪 6.5 内置函数 6.6 递归函数 6.7 将函数作为参数 6.8 闭包 6.9 应用闭包:将函数作为返回值 应用闭包:将函数作为返回值 6.10 使用闭包调试 6.11 计算函数执行时间 6.12 通过内存缓存来提升性能 第7章:数组与切片 7.1 声明和初始化 7.2 切片 7.3 For-range 结构 7.4 切片重组(reslice) 7.5 切片的复制与追加 7.6 字符串、数组和切片的应用 第8章:Map 8.1 声明、初始化和 make 8.2 测试键值对是否存在及删除元素 8.3 for-range 第二个例子:读和写 11.9 空接口 11.10 反射包 11.11 Printf 和反射 11.12 接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 第12章:读写数据 12.1 读取用户的输入 12.2 文件读写 12.3 文件拷贝 12.4 从命令行读取参数 12.5 用 buffer 读取文件 - 4 - 本文档使用 书栈(BookStack0 码力 | 466 页 | 4.44 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第5章:关键字和标识符 第6章:基本类型和它们的字面量表示 第7章:常量和变量 - 顺便介绍了类型不确定值和类型推断 第8章:运算操作符 - 顺便介绍了更多的类型推断规则 第9章:函数声明和调用 第10章:代码包和包引入 第11章:表达式、语句和简单语句 第12章:基本流程控制语法 第13章:协程、延迟函数调用、以及恐慌和恢复 Go类型系统 第14章:Go类型系统概述 - 精通Go编程必读 第15章:指针 第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 如何使用和解读组合类型 第27章:反射 - reflect标准库包中提供的反射支持 一些专题 第28章:代码断行规则 第29章:更多关于延迟函数调用的知识点 第30章:一些恐慌/恢复用例 第31章:详解panic/recover原理 - 也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除0 码力 | 591 页 | 21.40 MB | 1 年前3
Go 1.18 中的泛型Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 1 语法和使用 2 什么时候需要泛型? 3 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的 类型: type T interface { Add(T) T } func Sum(elems ...T) (sum T) { // T 可以是任何实现 sum = elems[0] for _, v := range elems[1:] { sum = sum.Add(v) } return } 当使用类型参数作为函数的形参类型时,函数调用方传递的实际参数必须是满足类型参数所约束的类型: func GenericSum[S ~int](elems ...S) (sum S) { // S 的底层类型必须底层类型为 int C](v T) (T, error) 普通参数列表 返回值列表 类型参数 类型集(约束) type S[T C]struct 类型参数 类型集(约束) 类型参数列表 类型参数的声明紧随:1)函数名之后,或者 2)类型名之后。类型参数通过类型集进行约束。 类型集 (Type Set) 的定义 type I[T C] interface { ~int | ~int32 | ~int640 码力 | 45 页 | 501.50 KB | 1 年前3
对 Go 程序进行可靠的性能测试程序进行可靠的性能测试 进行性能基准测试的方法 8 func BenchmarkFoo(b *testing.B) { for i := 0; i < b.N; i++ { foo() // 被测函数 } } 执行性能基准测试: $ go test -bench=. benchstat 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 benchstat 独立:两个事件互不影响,性质之一: ● 随机变量:是一个函数,参数是所有可能的样本,返回值是这些样本的取值,例如 ● 期望:随机变量以其概率为权重的加权平均值,即 ● 方差:样本取值与期望之间的「距离」,距离定义为差的平方和,即 ● 概率密度函数:是一个函数,参数是随机变量取值,返回值是随机变量取得该值的概率 ● 累积分布函数:随机变量取值小于某个值的概率 ● 正态分布:一种特殊的概率密度函数 ● 中心极限定理:无穷多个独立的随机变量的和服从正态分布 * 额外的说明见演讲者备注 2020 © Changkun Ou · Go 夜读 · 对 Go 程序进行可靠的性能测试 检验的类型 19 ● 统计是一套在总体分布函数完全未知或者只知道形式、不知参数的情况下,为了由样本推断总体的某些未知特性,形成的 一套方法论。 ● 多次抽样:对同一个性能基准测试运行多次,根据中心极限定理,如果理论均值存在,则抽样噪声服从正态分布的。 ● 当重复执行完某个性能基准测试后,0 码力 | 37 页 | 1.23 MB | 1 年前3
Go可观测性实践Go工程可观测性实践 周曙光 得物 Go开发 目 录 可观测性概述 01 链路追踪 02 指标 03 可观测性概述 第一部分 广义的可观测性:可以根据系统的外部输出信息推断出系统内部状态的好 坏。 软件系统的可观测性:一种度量能力,能帮你更好的理解系统当前所处的 任何状态。如果无需发布新代码就可以理解任何新的或怪异的状态,那么 系统就具备可观测性。 什么是可观测性? 可观测性开源产品 覆盖组件不限于:数据库、缓存、消息队列、RPC、HTTP等。 插桩(拦截器) 创建并命名上下文(HTTP请 求或gRPC)中已存在的任意 Span的子Span,开始计时 器计时,计算Span的时长, 在函数调用结束(defer)中完 成用于传输给后端的Span。 插桩(Hook) Span的开始和结束 对于Go来说,在进程或者goroutine上下文中出现活跃的Span的任何地方, 都可以调用0 码力 | 35 页 | 2.88 MB | 1 年前3
Hello 算法 1.1.0 Go版本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 第 0 章 前言 hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 库函数中都有插入排序的身影。 例三:货币找零。假设我们在超市购买了 69 元的商品,给了收银员 100 元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 第 0 章 前言 hello‑algo.com 5 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文 ,每一轮将一张扑克牌从无序部分插入至有序部分,直至所有扑克牌都有序。 图 1‑2 扑克排序步骤 上述整理扑克牌的方法本质上是“插入排序”算法,它在处理小型数据集时非常高效。许多编程语言的排序 库函数中都有插入排序的身影。 例三:货币找零。假设我们在超市购买了 69 元的商品,给了收银员 100 元,则收银员需要找我们 31 元。他 会很自然地完成如图 1‑3 所示的思考。 1. 可选项是比 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。 以下函数基于 for 循环实现了求和 1 + 2 + ⋯ + ? ,求和结果使用变量 res 记录。需要注意的是,Python 中 range(a, b) 对应的区间是“左闭右开”的,对应的遍历范围为 ?0 码力 | 382 页 | 17.60 MB | 1 年前3
共 50 条
- 1
- 2
- 3
- 4
- 5













