 Go 入门指南(The way to Go)nel) 18.9 网络和网页应用 18.10 其他 18.11 出于性能考虑的最佳实践和建议 - 6 - 本文档使用 书栈(BookStack.CN) 构建 致谢 当前文档 《Go入门指南》 由 进击的皇虫 使用 书栈(BookStack.CN) 进行构建,生成于 2018-02-08。 书栈(BookStack.CN) 仅提供文档编写、整理、归类等功能,以及对文档内容的生成和导出工具。 Go 语言版本进行修改而不作出特别声明。 该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展! 14.9 实现 Futures 模式 如果你喜欢本书 《Go入门指南》,你可以参与到本书的翻译或纠正工作中来,具体请联系【无闻 E-mail: u#gogs.io】,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。 参见 Go 语言学习资料与社区索引。 的问题最好不要发问 本书原作者:Ivo Balbaert 参与翻译人员: @zhanming themorecolor @everyx @chidouhu @spawnris 《Go入门指南》 翻译进度 支持本书 交流社区 新人守则 致谢 阅前必读 - 8 - 本文档使用 书栈(BookStack.CN) 构建 @domainname @leisore @dake0 码力 | 466 页 | 4.44 MB | 1 年前3 Go 入门指南(The way to Go)nel) 18.9 网络和网页应用 18.10 其他 18.11 出于性能考虑的最佳实践和建议 - 6 - 本文档使用 书栈(BookStack.CN) 构建 致谢 当前文档 《Go入门指南》 由 进击的皇虫 使用 书栈(BookStack.CN) 进行构建,生成于 2018-02-08。 书栈(BookStack.CN) 仅提供文档编写、整理、归类等功能,以及对文档内容的生成和导出工具。 Go 语言版本进行修改而不作出特别声明。 该翻译版本已获得原作者(Ivo Balbaert)本人授权,并表示支持开源事业的发展! 14.9 实现 Futures 模式 如果你喜欢本书 《Go入门指南》,你可以参与到本书的翻译或纠正工作中来,具体请联系【无闻 E-mail: u#gogs.io】,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。 参见 Go 语言学习资料与社区索引。 的问题最好不要发问 本书原作者:Ivo Balbaert 参与翻译人员: @zhanming themorecolor @everyx @chidouhu @spawnris 《Go入门指南》 翻译进度 支持本书 交流社区 新人守则 致谢 阅前必读 - 8 - 本文档使用 书栈(BookStack.CN) 构建 @domainname @leisore @dake0 码力 | 466 页 | 4.44 MB | 1 年前3
 Go 入门指南(The way to Go)和一些编程语言的相关概念进 行比较(书中会使用大家所熟知的缩写 “OO” 来表示面向对象)。 本书将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模 Go入门指南 - 1 - 本文档使用 看云 构建 式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来 开发 Web 应用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 念或者技巧来解释相关的代码示例,以避免你在不了 解某些高级概念的情况下而感到迷茫。 我们通过 227 个完整的代码示例和书中的解释说明来对所有涉及到的概念和技巧进行彻底的讲解,你可以 Go入门指南 - 2 - 本文档使用 看云 构建 下载这些代码到你的电脑上运行,从而加深对概念的理解。 本书会尽可能地将前后章节的内容联系起来,当然这也同时要求你通过学习不同的知识来对一个问题提出 尽可 Muller、Ryanne Dolan 和 Satish V.J. 给予我巨大的帮助,还有那些 golang-nuts 邮件列表里的 所有的成员。 欢迎来到 Go 语言开发的奇妙世界! Go入门指南 - 3 - 本文档使用 看云 构建 第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 第2章:安装与运行环境 第3章:编辑器、集成开发环境与其它工具 第1章:Go 语言的起源,发展与普及0 码力 | 380 页 | 2.97 MB | 1 年前3 Go 入门指南(The way to Go)和一些编程语言的相关概念进 行比较(书中会使用大家所熟知的缩写 “OO” 来表示面向对象)。 本书将会从最基础的概念讲起,同时也会讨论一些类似在应用 goroutine 和 channel 时有多少种不同的模 Go入门指南 - 1 - 本文档使用 看云 构建 式,如何在 Go 语言中使用谷歌 API,如何操作内存,如何在 Go 语言中进行程序测试和如何使用模板来 开发 Web 应用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 念或者技巧来解释相关的代码示例,以避免你在不了 解某些高级概念的情况下而感到迷茫。 我们通过 227 个完整的代码示例和书中的解释说明来对所有涉及到的概念和技巧进行彻底的讲解,你可以 Go入门指南 - 2 - 本文档使用 看云 构建 下载这些代码到你的电脑上运行,从而加深对概念的理解。 本书会尽可能地将前后章节的内容联系起来,当然这也同时要求你通过学习不同的知识来对一个问题提出 尽可 Muller、Ryanne Dolan 和 Satish V.J. 给予我巨大的帮助,还有那些 golang-nuts 邮件列表里的 所有的成员。 欢迎来到 Go 语言开发的奇妙世界! Go入门指南 - 3 - 本文档使用 看云 构建 第一部分:学习 Go 语言 第1章:Go 语言的起源,发展与普及 第2章:安装与运行环境 第3章:编辑器、集成开发环境与其它工具 第1章:Go 语言的起源,发展与普及0 码力 | 380 页 | 2.97 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a面量,则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 字母的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直 白反引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反引号 风格的字面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要舍入时,才能用来表示一个整数基本类型的 gotv :tip run forrange2.go [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的直 觉;并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变而 导致行为变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 608 页 | 1.08 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a面量,则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 字母的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直 白反引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反引号 风格的字面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要舍入时,才能用来表示一个整数基本类型的 gotv :tip run forrange2.go [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的直 觉;并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变而 导致行为变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直白反 引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反引号风格的字 面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要 forrange2.go 5| [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6| 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的直觉; 并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变而导致行为 变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 591 页 | 21.40 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号,直白反 引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反引号风格的字 面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要 forrange2.go 5| [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6| 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的直觉; 并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变而导致行为 变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 591 页 | 21.40 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a字面量,则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 字母的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字 节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号, 直白反引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反 引号风格的字面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要舍入时,才能用来表示一个整数基本类型的 run forrange2.go 5| [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6| 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的 直觉;并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变 而导致行为变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 821 页 | 956.82 KB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a字面量,则其必须为并且总是被视为十进制形式。 一些例子: 1.23i 1.i .23i 123i 0123i // == 123i(兼容性使然。见下) 1.23E2i // == 123i 1e-1i 011i // == 11i(兼容性使然。见下) 00011i // == 11i(兼容性使然。见下) // 下面这几行从Go 1.13开始才能编译通过。 0o11i // == 9i 0x11i 字母的UTF-8编码只需要一个字节;每个中文字符的UTF-8编码需要三个字 节。 直白反引号风格的字面表示中是不支持转义字符的。 除了首尾两个反引号, 直白反引号风格的字面表示中不能包含反引号。 为了跨平台兼容性,直白反 引号风格的字面表示中的回车符(Unicode码点为0x0D) 将被忽略掉。 字符串类型的零值在代码里用 ""或``表示。 基本数值类型字面量的适用范围 一个数值型的字面量只有在不需要舍入时,才能用来表示一个整数基本类型的 run forrange2.go 5| [Run]: $HOME/.cache/gotv/bra_master/bin/go run forrange2.go 6| 6 因此,这是一个破坏了向后兼容性的语义改变。 但是新的语义更符合人们的 直觉;并且从理论上,到目前还没有发现旧的在逻辑上正确的代码因为此改变 而导致行为变化的情况。 把数组指针当做数组来使用 对于某些情形,我们可以把数组指针当做数组来使用。0 码力 | 821 页 | 956.82 KB | 1 年前3
 1.每秒百万数据点 Go 应用监控系统演进不可忽略的问题 ● 数据完整性校验缺失 ● 可能会丢数据 ○ 没有 WAL(Write-Ahead Log) ● 扩容/维护时可能容易崩溃 ○ vmstorage 没有服务自动发现 ● 兼容性需要关注 ○ MetricsQL 与 PromQL 有差异 总结与展望 第五部分 2023 关键成果 ● 查询性能大幅提升,用户体验好 ● 稳定性大幅提升,几乎没有 OOM ● 资源成本得到降低,至少降低0 码力 | 42 页 | 2.32 MB | 1 年前3 1.每秒百万数据点 Go 应用监控系统演进不可忽略的问题 ● 数据完整性校验缺失 ● 可能会丢数据 ○ 没有 WAL(Write-Ahead Log) ● 扩容/维护时可能容易崩溃 ○ vmstorage 没有服务自动发现 ● 兼容性需要关注 ○ MetricsQL 与 PromQL 有差异 总结与展望 第五部分 2023 关键成果 ● 查询性能大幅提升,用户体验好 ● 稳定性大幅提升,几乎没有 OOM ● 资源成本得到降低,至少降低0 码力 | 42 页 | 2.32 MB | 1 年前3
 如何向Go官方提交代码-蒙卓bug -- 困难 4. release-blocker -- 地狱 CL类型 如何提交CL 1. typo 2. 新特性 a. 新API、新语法,不能破坏兼容性 b. 性能提升,太少的基本会被打回 c. 新硬件指令需要真实环境 3. bug a. 所有平台都没有问题 b. 不能引起其他bug CL类型要求 CL举例 CL举例 CL举例 CL举例0 码力 | 38 页 | 5.95 MB | 1 年前3 如何向Go官方提交代码-蒙卓bug -- 困难 4. release-blocker -- 地狱 CL类型 如何提交CL 1. typo 2. 新特性 a. 新API、新语法,不能破坏兼容性 b. 性能提升,太少的基本会被打回 c. 新硬件指令需要真实环境 3. bug a. 所有平台都没有问题 b. 不能引起其他bug CL类型要求 CL举例 CL举例 CL举例 CL举例0 码力 | 38 页 | 5.95 MB | 1 年前3
 6.从 0 到 1 搭建十亿级包裹 API Versioning企业应根据自身的业务特性选择合适的 Support Policy。 3.2 API version v1/v2/v3 这种数值类型的版本号,没有生命周期,无法约束废弃时间。以 日期作为 API Version 对于生命周期以及兼容性可以有更加清晰的定义。 3.3 Webhook version 3.4 公开文档 3.5.1 系统架构概览 3.5.2 系统设计的 trade-off 我们只在应用层做版本化, 每个版本维护的业务逻辑实0 码力 | 28 页 | 2.26 MB | 1 年前3 6.从 0 到 1 搭建十亿级包裹 API Versioning企业应根据自身的业务特性选择合适的 Support Policy。 3.2 API version v1/v2/v3 这种数值类型的版本号,没有生命周期,无法约束废弃时间。以 日期作为 API Version 对于生命周期以及兼容性可以有更加清晰的定义。 3.3 Webhook version 3.4 公开文档 3.5.1 系统架构概览 3.5.2 系统设计的 trade-off 我们只在应用层做版本化, 每个版本维护的业务逻辑实0 码力 | 28 页 | 2.26 MB | 1 年前3
 5.cgo 原理解析及优化实践extraM 不好搞 • pthread_key_create(&pthread_g, pthread_key_destructor) • crosscall2 是手写 Plan9 的汇编函数 • 兼容性处理:十来个 CPU,好几个 OS • 搞懂混合编译:Go,ASM ,C dropm 的判断条件 1. 有些操作系统,比如 Windows,不支持 pthread 来注册 destructor0 码力 | 45 页 | 5.74 MB | 1 年前3 5.cgo 原理解析及优化实践extraM 不好搞 • pthread_key_create(&pthread_g, pthread_key_destructor) • crosscall2 是手写 Plan9 的汇编函数 • 兼容性处理:十来个 CPU,好几个 OS • 搞懂混合编译:Go,ASM ,C dropm 的判断条件 1. 有些操作系统,比如 Windows,不支持 pthread 来注册 destructor0 码力 | 45 页 | 5.74 MB | 1 年前3
 Go语言基础
Golang Fundaments包函数 adder 隶属应用程序栈 – adder 返回的函数隶属 adder 执行时创建在堆中的栈 – 返回函数访问隶属函数实例的变量称为“闭包” Go语言入门资源 • 语言概览 – 官方Go指南,gotour – 系统的学习,go语言教程 • 程序结构 – 包/子包(main) • Go源代码 – 函数(main, init) • 命令行工具 • 编程参考与规范 – 官方文档”Effective0 码力 | 21 页 | 851.30 KB | 1 年前3 Go语言基础
Golang Fundaments包函数 adder 隶属应用程序栈 – adder 返回的函数隶属 adder 执行时创建在堆中的栈 – 返回函数访问隶属函数实例的变量称为“闭包” Go语言入门资源 • 语言概览 – 官方Go指南,gotour – 系统的学习,go语言教程 • 程序结构 – 包/子包(main) • Go源代码 – 函数(main, init) • 命令行工具 • 编程参考与规范 – 官方文档”Effective0 码力 | 21 页 | 851.30 KB | 1 年前3
共 18 条
- 1
- 2














