Golang 101(Go语言101 中文版) v1.21.a力更多。 gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章 中介绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go官 方工具链的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。 自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地 改进。 使用早期的gc编译的程序在运行的时候在每次垃圾回收的结尾常常会有 明显的停顿。 我们也可以使用工具[GoTV](https://go101.org/apps-and-libs/gotv.html)来安装多个 Go工具链版本,并方便和谐地使用它们。 Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方 工具链1.21.x版本支持从1.0到1.21的所有Go语言版本。 为了从任意目录运行Go官方工具链中工具命令(通过go命令), Go官方工具 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来 管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认 支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 HOME目录下的名为go文件夹对应的目录路径。0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a多。 gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章中介 绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go官方工具链 的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。 自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地改 进。 使用早期的gc编译的程序在运行的时候在每次垃圾回收的结尾常常会有明显 我们也可以使用工具[GoTV](https://go101.org/apps-and-libs/gotv.html)来安装 多个Go工具链版本,并方便和谐地使用它们。 Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方工具链 1.21.x版本支持从1.0到1.21的所有Go语言版本。 为了从任意目录运行Go官方工具链中工具命令(通过go命令), Go官方工具链安 装目录下的bin子目录路径必须配置在PATH环境变量中。 装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序安装Go 官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用来管理 项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的HOME目 录下的名为go文件夹对应的目录路径。0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a更多。 gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章 中介绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go 官方工具链的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。 自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地 改进。 使用早期的gc编译的程序在运行的时候在每次垃圾回收的结尾常常会 有明显的停顿。 我们也可以使用工具[GoTV](https://go101.org/apps-and-libs/gotv.html)来安装多 个Go工具链版本,并方便和谐地使用它们。 Go官方工具链的版本和其所支持的最高Go语言版本是一致的。 比如,Go官方 工具链1.21.x版本支持从1.0到1.21的所有Go语言版本。 为了从任意目录运行Go官方工具链中工具命令(通过go命令), Go官方工具 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 链安装目录下的bin子目录路径必须配置在PATH环境变量中。 当使用安装程序 安装Go官方工具链时,安装程序很可能已经自动地将此配置好了。 Go官方工具链近来的版本均支持一个称为Go模块(Go modules)的特性,用 来管理项目依赖。 此特性在版本1.11中被试验性地引入并从版本1.16开始被默 认支持。 我们应该了解一个环境变量:GOPATH。 此环境变量的默认值为当前用户的 HOME目录下的名为go文件夹对应的目录路径。0 码力 | 821 页 | 956.82 KB | 1 年前3
6.从 0 到 1 搭建十亿级包裹 API Versioningv2, v3 就是版本化.. 2.1 本质 向后兼容 - API 的稳定性要求避免破坏性的更改。在进行更新或修改时,应保 持对现有功能的支持,以防止影响已部署的应用程序或客户端。 只有做到对当前版本 API 不发布任何 breaking changes 才能向后兼容。 2.1 本质 实际上的 API Versioning 1. API 有版本概念 2. 同一个版本的每次 API 变更都能向后兼容 不能向后兼容的发布只会发生在新版本中 2.2 实现效果 一个 Versioned 的 API,将提供多套稳定版 本的 API 在线上,每套 API 有独立的逻辑、 实例、资源,各版本之间互不影响。客户端 可以自由选择调用哪个版本。 How Part 3/4 1. Support Policy 2. API Version 3. Webhook Version 4. 公开文档 5. 系统架构 6. 版本维护 3 Policy 每新增一个版本都会带来额外的维护成本,所以版本发布频率高的企 业,版本支持时间较短;版本发布频率低的企业,版本支持时间较长。 企业应根据自身的业务特性选择合适的 Support Policy。 3.2 API version v1/v2/v3 这种数值类型的版本号,没有生命周期,无法约束废弃时间。以 日期作为 API Version 对于生命周期以及兼容性可以有更加清晰的定义。0 码力 | 28 页 | 2.26 MB | 1 年前3
Go 2 Generics? A (P)review(P)review 当我们谈论泛型时,我们在谈论什么? 4 多态是同一形式表现出不同行为的一种特性。在 编程语言理论中被分为两类: 临时性多态(Ad hoc Polymorphism)根据实参类型调用对应的版本,仅支持数量有限的 调用。也被翻译为特设多态。例如:函数重载 func Add(a, b int) int { return a+b } func Add(a, b float64) float64 Add(1.0, 2.0) // 调用第二个 Add("1", "2") // 编译时不检查,运行时找不到实现,崩溃 参数化多态(Parametric Polymorphism)根据实参类型生成不同的版本 ,支持任意数量的 调用。即泛型 func Add(a, b T) T{ return a+b } Add(1, 2) // 编译器生成 T = int 的 Add Add(float64(1 也需要这种社区的力量(尽管 Go 团队喜欢「一意孤行」??????♂) ● 引入泛型会打破向前兼容性吗? ○ 从现在的设计来看,不会 ○ 但从 C++ 的历史经验来看,已经积累的代码的迁移过程将是痛苦且漫长的 2020 © Changkun Ou · Go 夜读 · Go 2 Generics? A (P)review 这么多不同版本的泛型设计里,你最喜欢哪一个? 2020 © Changkun Ou · Go0 码力 | 41 页 | 770.62 KB | 1 年前3
5.cgo 原理解析及优化实践extraM 不好搞 • pthread_key_create(&pthread_g, pthread_key_destructor) • crosscall2 是手写 Plan9 的汇编函数 • 兼容性处理:十来个 CPU,好几个 OS • 搞懂混合编译:Go,ASM ,C dropm 的判断条件 1. 有些操作系统,比如 Windows,不支持 pthread 来注册 destructor GC 对象的逃逸 增加 annotations,标记不会回调 https://go-review.googlesource.com/c/go/+/497837 Go 1.23 才可用 问题:老版本 Go 不认识新增的 cgo annotation,go mod vendor 时会报错 解决:Go 1.22 允许新 annotation,但是禁止使用 cgocheck ① 可以将一个 Go0 码力 | 45 页 | 5.74 MB | 1 年前3
Go 入门指南(The way to Go)就是实践,运行它的代码,修改并尝试更多的方 案。因此,你绝对不可以忽略书中的 130 个代码练习,这将对你学习好 Go 语言有很大的帮助。比如,我 们就为斐波那契算法提供了 13 个不同的版本,而这些版本都使用了不同的概念和技巧。 你可以通过访问本书的 官方网站 下载书中的代码(译者注:所有代码文件已经包括在 GitHub 仓库中), 并获得有关本书的勘误情况和内容更新。 为了让你在成为 18 章可以作为你在开发时的一个参考手册, 因为当中包含了众多的有价值的代码片段以及相关的解释说明。 最后要说明的是,你可以通过完整的索引来快速定位你需要阅读的章节。书中所有的代码都在 Go1.4 版本 下测试通过。 这里有一段来自在 C++、Java 和 Python 领域众所周知的专家 Bruce Eckel 的评论: “作为一个有着 C/C++ 背景的开发者,我在使用 Go 语言时仿佛呼吸到了新鲜空气一般,令人心旷神 直到 2009 年 11 月 10 日,开发团队将 Go 语言项目以 BSD-style 授权(完全开源)正式公布在 Linux 和 Mac OS X 平台上的版本。Hector Chu 于同年 11 月 22 日公布了 Windows 版本。 作为一个开源项目,Go 语言借助开源社区的有生力量达到快速地发展,并吸引更多的开发者来使用并改 善它。自该开源项目发布以来,超过 200 名非谷歌员工的贡献者对0 码力 | 380 页 | 2.97 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 编码某些非 英文字符(例如中文)会更加高效,因为它只需要 2 个字节,而 UTF‑8 可能需要 3 个字节。从兼容性的角度 看,UTF‑8 的通用性最佳,许多工具和库都优先支持 UTF‑8 。 3. 数据结构 hello‑algo.com 49 3.4.5. 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 需要注意的是,以上讨论的都是字符串在编程语言中的存储方式,这和字符串如何在文件中存储或在网络中 传输是两个不同的问题。在文件存储或网络传输中,我们一般会将字符串编码为 UTF‑8 格式,以达到最优的 兼容性和空间效率。 3.5. 小结 数据结构分类 3. 数据结构 hello‑algo.com 50 ‧ 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而 通常借助队列实现。 ‧ 图的深度优先遍历是一种优先走到底、无路可走时再回溯的搜索方式,常基于递归来实现。 9.4.1. Q & A � 路径的定义是顶点序列还是边序列? 维基百科上不同语言版本的定义不一致:英文版是“路径是一个边序列”,而中文版是“路 径是一个顶点序列”。以下是英文版原文:In graph theory, a path in a graph is a finite or0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 编码某些非 英文字符(例如中文)会更加高效,因为它只需要 2 个字节,而 UTF‑8 可能需要 3 个字节。 从兼容性的角度看,UTF‑8 的通用性最佳,许多工具和库都优先支持 UTF‑8 。 3.4.5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。在等长编码 需要注意的是,以上讨论的都是字符串在编程语言中的存储方式,这和字符串如何在文件中存储或在网络中 传输是两个不同的问题。在文件存储或网络传输中,我们通常会将字符串编码为 UTF‑8 格式,以达到最优的 兼容性和空间效率。 第 3 章 数据结构 hello‑algo.com 62 3.5 小结 1. 重点回顾 ‧ 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而 搜索方式,通常借助队列实现。 ‧ 图的深度优先遍历是一种优先走到底、无路可走时再回溯的搜索方式,常基于递归来实现。 2. Q & A � 路径的定义是顶点序列还是边序列? 维基百科上不同语言版本的定义不一致:英文版是“路径是一个边序列”,而中文版是“路 径是一个顶点序列”。以下是英文版原文:In graph theory, a path in a graph is a finite or0 码力 | 379 页 | 30.70 MB | 1 年前3
Go 入门指南(The way to Go)之后,决定每天抽出一点时间来进行翻译的工作,并且以 开源的形式免费分享给有需要的 Go 语言爱好者。 尽管该书对目前 Go 语言版本来说有小部分内容相对过时,但是为当下不可多得的好书,相关内容已获得作者同意根 据当前 Go 语言版本进行修改而不作出特别声明。 该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展! 14.9 实现 Futures 模式 如果你喜欢本书 解决方案。记住,学习一门新语言的最佳方式就是实践,运行它的代码,修改并尝试更多的方案。因此,你绝对不可 以忽略书中的 130 个代码练习,这将对你学习好 Go 语言有很大的帮助。比如,我们就为斐波那契算法提供了 13 个不同的版本,而这些版本都使用了不同的概念和技巧。 你可以通过访问本书的 官方网站 下载书中的代码(译者注:所有代码文件已经包括在 GitHub 仓库中),并获得 有关本书的勘误情况和内容更新。 为了让你在成为 12 - 本文档使用 书栈(BookStack.CN) 构建 的有价值的代码片段以及相关的解释说明。 最后要说明的是,你可以通过完整的索引来快速定位你需要阅读的章节。书中所有的代码都在 Go1.4 版本下测试通 过。 这里有一段来自在 C++、Java 和 Python 领域众所周知的专家 Bruce Eckel 的评论: “作为一个有着 C/C++ 背景的开发者,我在使用 Go 语言时仿佛0 码力 | 466 页 | 4.44 MB | 1 年前3
共 41 条
- 1
- 2
- 3
- 4
- 5













