Go读书会第二期
Go 读书会第二期 白明 《 Go 语言精进之路》作者 tonybai.com 博主 目 录 写书的历程 0 1 Go 语言精进之路导读 0 2 我是怎么读书的 0 3 写书的历程 第一部分 程序员的“小目标”与写书三要素 写书三要素 写书 <- 能力 +意愿 + 机会 过程 写书不易,写高质量的书更难 2018 年下 旬开始动笔 2020 年 11 月下旬 初稿交付 初稿交付 2021 年 12 月出版 《 Go 语言精进之路》导读 第二部分 整体写作思路 异曲同工 精进之路,思维先行 – part1 践行哲学,遵循惯例,认清本质,理解原理 - (part2- part10) 精进之路,思维先行 异曲同工 “ 语言决定思维方式” - 萨丕尔假说 “ 我的语言之局限,即我的世界之局限” - 路德维 希 · 维特根斯坦(语言哲学奠基人) “0 码力 | 26 页 | 4.55 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
在此程序中,单词package和func是两个关键字。 两个main是两个标识符。 标 识符和关键字将在后续的一篇文章中讲解。 此程序的第一行指定了当前源代码文件所处的包的包名(此处为main)。 第二 行是一个空行,用来增强可读性。 第三和第四行声明了一个名为main的函数。 此函数为程序的入口函数。 运行一个Go程序 Go官方工具链工具要求所有的Go源代码文件必须以.go后缀结尾。 这里,我们 byte表示同一个类型 type char = rune // char、rune和int32表示同一个类型 我们将上面定义的real类型和内置类型float32都称为float32类型 (注意这里的 第二个float32是一个泛指,而第一个高亮的float32是一个特指)。 同样地, MyString和string都被称为字符串(string)类型,status和bool都被称为布尔 (bool)类型。 事实上,在日常编程中,这四种rune字面量形式的变种很少用来表示rune值。 它们多用做字符串的双引号字面量形式中的转义字符(详见下一小节)。 如果一个rune字面量中被单引号包起来的部分含有两个字符, 并且第一个字符 是\,第二个字符不是x、 u和U,那么这两个字符将被转义为一个特殊字符。 目 前支持的转义组合为: \a (rune值:0x07) 铃声字符 \b (rune值:0x08) 退格字符(backspace)0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
11 | type char = rune // char、rune和int32表示同一个类型 我们将上面定义的real类型和内置类型float32都称为float32类型 (注意这里 的第二个float32是一个泛指,而第一个高亮的float32是一个特指)。 同样地, MyString和string都被称为字符串(string)类型,status和bool都被称为布 尔(bool)类型。 事实上,在日常编程中,这四种rune字面量形式的变种很少用来表示rune值。 它们多用做字符串的双引号字面量形式中的转义字符(详见下一小节)。 如果一个rune字面量中被单引号包起来的部分含有两个字符, 并且第一个字符 是\,第二个字符不是x、 u和U,那么这两个字符将被转义为一个特殊字符。 目前支持的转义组合为: \a (rune值:0x07) 铃声字符 \b (rune值:0x08) 退格字符(backspace) (但是请注意,今后的Go版本可能只允许rune或者byte整数被转换 为字符串 ? 。 从Go官方工具链1.15版本开始,go vet命令会对从非rune 和非byte整数到字符串的转换做出警告。) 事实上,第二种情形并不要求v必须是一个常量。 如果v是一个常量,则转换 结果也是一个常量。 如果v不是一个常量,则转换结果也不是一个常量。 一些合法的转换例子: // 结果为complex128类型的1.0+00 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
在此程序中,单词package和func是两个关键字。 两个main是两个标识符。 标 识符和关键字将在后续的一篇文章中讲解。 此程序的第一行指定了当前源代码文件所处的包的包名(此处为main)。 第二行 是一个空行,用来增强可读性。 第三和第四行声明了一个名为main的函数。 此函 数为程序的入口函数。 运行一个Go程序 Go官方工具链工具要求所有的Go源代码文件必须以.go后缀结尾。 这里,我们假设 11| type char = rune // char、rune和int32表示同一个类型 我们将上面定义的real类型和内置类型float32都称为float32类型 (注意这里的 第二个float32是一个泛指,而第一个高亮的float32是一个特指)。 同样地, MyString和string都被称为字符串(string)类型,status和bool都被称为布 尔(bool)类型。 它们 多用做字符串的双引号字面量形式中的转义字符(详见下一小节)。 第6章:基本类型和它们的字面量表示 30 如果一个rune字面量中被单引号包起来的部分含有两个字符, 并且第一个字符是 \,第二个字符不是x、 u和U,那么这两个字符将被转义为一个特殊字符。 目前 支持的转义组合为: \a (rune值:0x07) 铃声字符 \b (rune值:0x08) 退格字符(backspace)0 码力 | 591 页 | 21.40 MB | 1 年前3Go 入门指南(The way to Go)
语言中进行程序测试和如何使用模板来 开发 Web 应用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 2 章)和开发 环境(第 3 章)。 在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 4、7、8 章), 控制结构(第 5 章),函数(第 6 章),结构与方法(第 10 章)和接口(第 11 章)。我们会对 Go 代码实现 C++ 的抽象类。 目前使用 SWIG 存在的一个问题是它无法支持所有的 C++ 库,比如说它就无法解析 TObject.h。 Go入门指南 - 29 - 本文档使用 看云 构建 第二部分:语言的核心结构与技术 第4章:基本结构和基本数据类型 第5章:控制结构 第6章:函数(function) 第7章:数组与切片 第8章:Map 第9章:包(package) 第10 strings.TrimSpace(s) 来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则 可以使用 strings.Trim(s, "cut") 来将开头和结尾的 cut 去除掉。该函数的第二个参数可以包含任何字 符,如果你只想剔除开头或者结尾的字符串,则可以使用 TrimLeft 或者 TrimRight 来实现。 Go入门指南 - 70 - 本文档使用 看云 构建 4.70 码力 | 380 页 | 2.97 MB | 1 年前3Go 入门指南(The way to Go)
类型断言:如何检测和转换接口变量的类型 11.4 类型判断:type-switch 11.5 测试一个值是否实现了某个接口 11.6 使用方法集与接口 11.7 第一个例子:使用 Sorter 接口排序 11.8 第二个例子:读和写 11.9 空接口 11.10 反射包 11.11 Printf 和反射 11.12 接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 章)和开发环境 前言 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐 趣 前言 - 11 - 本文档使用 书栈(BookStack.CN) 构建 (第 3 章)。 在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 4、7、8 章),控制结构 (第 5 章),函数(第 6 章),结构与方法(第 10 章)和接口(第 11 章)。我们会对 Go TrimSpace(s) 来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则可以使用 strings.Trim(s, "cut") 来将开头和结尾的 cut 去除掉。该函数的第二个参数可以包含任何字符,如果你只想 剔除开头或者结尾的字符串,则可以使用 TrimLeft 或者 TrimRight 来实现。 strings.Fields(s) 将会利用 10 码力 | 466 页 | 4.44 MB | 1 年前3Go Web编程
BianJiang (编写go开发工具Vim和Emacs的设置) Oling Cat(review代码) Wenlei Wu(提供一些图片展示) polaris(review书) 雨痕(review第二章) 授权许可 授权许可 1 除特别声明外,本书中的内容使用CC BY-SA 3.0 License(创作共用 署名-相同方式共享3.0许可协议)授权,代码 遵循BSD 3-Clause go get 这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google Code和Launchpad。这个命令在 内部实际上分成了两步操作:第一步是下载源码包,第二步是执行go install。下载源码包的go工具会自动根据不 同的域名调用不同的源码工具,对应关系如下: BitBucket (Mercurial Git) GitHub (Git) Google get支持自定义域名的功能,具体参见go help remote。 go install go install 这个命令在内部实际上分成了两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移 到$GOPATH/pkg或者$GOPATH/bin。 16 go test go test 执行这个命令,会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。输出的信息类0 码力 | 295 页 | 5.91 MB | 1 年前3Hello 算法 1.0.0b4 Golang版
照代码自行敲一遍。与仅阅读 代码相比,编写代码的过程往往能带来更多收获。 Figure 0‑3. 运行代码示例 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download 识体 系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心 得可以在各个社区找到。 作为一本入门教程,本书内容主要涵盖“第一阶段”,旨在帮助你更高效地展开第二和第三阶段的学习。 Figure 0‑7. 算法学习路线 0.3. 小结 ‧ 本书的主要受众是算法初学者。如果已有一定基础,本书能帮助您系统回顾算法知识,书内源代码也可 作为“刷题工具库”使用。 // +n*n(技巧 3) for i := 0; i < 2 * n; i++ { for j := 0; j < n + 1; j++ { fmt.Println(0) } } } 第二步:判断渐近上界 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 以下表格展示了一些例子,其中一些夸张的0 码力 | 347 页 | 27.40 MB | 1 年前3Hello 算法 1.0.0b5 Golang版
与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以在图 0‑4 体 系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心 得可以在各个社区找到。 如图 0‑7 所示,本书内容主要涵盖“第一阶段”,旨在帮助你更高效地展开第二和第三阶段的学习。 第 0 章 前言 hello‑algo.com 8 图 0‑7 算法学习路线 0.3 小结 ‧ 本书的主要受众是算法初学者。如果已有一定基础,本书能帮助您系统回顾算法知识,书内源代码也可 (?2) 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 表 2‑1 展示了一些例子,其中一些夸0 码力 | 379 页 | 30.70 MB | 1 年前3Hello 算法 1.1.0 Go版
章 前言 hello‑algo.com 6 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录所示的教程进行安装,如果已安装,则可跳过此步骤。 第二步:克隆或下载代码仓库。前往 GitHub 仓库。如果已经安装 Git ,可以通过以下命令克隆本仓库: git clone https://github.com/krahets/hello-algo (?2) 。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2?2 + 7? + 3 ?(?) = ?2 + ? 偷懒统计 (o.O) 2. 第二步:判断渐近上界 时间复杂度由 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用,其他 项的影响都可以忽略。 表 2‑2 展示了一些例子,其中一些夸张的值是 range nums { count++ } return count } 值得注意的是,输入数据大小 ? 需根据输入数据的类型来具体确定。比如在第一个示例中,变量 ? 为输入数 据大小;在第二个示例中,数组长度 ? 为数据大小。 3. 平方阶 ?(?2) 平方阶的操作数量相对于输入数据大小 ? 以平方级别增长。平方阶通常出现在嵌套循环中,外层循环和内层 循环的时间复杂度都为 ?(?)0 码力 | 383 页 | 18.48 MB | 1 年前3
共 34 条
- 1
- 2
- 3
- 4