 Go 入门指南(The way to Go)l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的 目标结果。 可用的编译器标记如下: flags: -I 针对包的目录搜索 -d 打印声明信息 -e 不限制错误打印的个数 -f 打印栈结构 com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安 装。你并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.5 在 Windows 的示例 /os_arch :包含标准库的包的对象文件( .a ) /src :包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言) /src/cmd :包含 Go 和 C 的编译器和命令行脚本 2.7 Go 运行时(runtime) 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime0 码力 | 380 页 | 2.97 MB | 1 年前3 Go 入门指南(The way to Go)l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的 目标结果。 可用的编译器标记如下: flags: -I 针对包的目录搜索 -d 打印声明信息 -e 不限制错误打印的个数 -f 打印栈结构 com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安 装。你并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.5 在 Windows 的示例 /os_arch :包含标准库的包的对象文件( .a ) /src :包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言) /src/cmd :包含 Go 和 C 的编译器和命令行脚本 2.7 Go 运行时(runtime) 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中。这个 runtime0 码力 | 380 页 | 2.97 MB | 1 年前3
 Go 入门指南(The way to Go)接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 第12章:读写数据 12.1 读取用户的输入 12.2 文件读写 12.3 文件拷贝 12.4 从命令行读取参数 12.5 用 buffer 读取文件 - 4 - 本文档使用 书栈(BookStack.CN) 构建 12.6 用切片读写文件 12.7 用 defer 关闭文件 12.8 使用接口的实际例子:fmt l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结 果。 可用的编译器标记如下: 1. flags: 2. -I 针对包的目录搜索 3. -d 打印声明信息 4. -e com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安装。你 并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.4 在 Mac0 码力 | 466 页 | 4.44 MB | 1 年前3 Go 入门指南(The way to Go)接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 第12章:读写数据 12.1 读取用户的输入 12.2 文件读写 12.3 文件拷贝 12.4 从命令行读取参数 12.5 用 buffer 读取文件 - 4 - 本文档使用 书栈(BookStack.CN) 构建 12.6 用切片读写文件 12.7 用 defer 关闭文件 12.8 使用接口的实际例子:fmt l = 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结 果。 可用的编译器标记如下: 1. flags: 2. -I 针对包的目录搜索 3. -d 打印声明信息 4. -e com/hg/。 注意事项 在 Mac 系统下使用到的 C 工具链是 Xcode 的一部分,因此你需要通过安装 Xcode 来完成这些工具的安装。你 并不需要安装完整的 Xcode,而只需要安装它的命令行工具部分。 你可以在 下载页面 页面下载到 Mac 系统下的一键安装包或源代码自行编译。 通过源代码编译安装的过程与环境变量的配置与在 Linux 系统非常相似,因此不再赘述。 2.4 在 Mac0 码力 | 466 页 | 4.44 MB | 1 年前3
 04. GraphQL in Chaos Mesh 2.0 - 李晨曦直接查询的状态,使用过程存在的一大障碍是噪音 过多。很多情况下 需要配合文本查询工具一起使用才能找到想要的信息。 当然,kubectl 提供了 json path 功能以对查询结果进行筛选,但它存在命令行交互不友好、复 杂、 难以阅读等问题。 上图为 kubectl 的 json path 使用样例 状态查询的障碍2 对于不可通过 kubernetes API 直接查询的状态,往往要通过创建 path,通过反 射生成结构体。 最后将结构体实例序列化成 yaml 格式打印。 Completion 由于查询状态有非常多的排列组合,我们依赖 GraphQL API 实现了丰富的动态自动补全。 后续的工作 强制 recover 目前我们的状态控制功能都集中在查询,而没有更改。后面最主要的工作之一就是 实现故障的强制恢 复,这涉及到 daemon 状态持久化,以及 API server 中的 mutations API。 Control Client API Server Target Pod mutations recover 命令简化 虽然我们有完备的查询路径自动补全,但很多常用状态还是需要更方便的命令来 查询。比如可以把 chaosctl log daemon 来作为命令 chaosctl get component:daemon/logs 的 alias。这种简化命令仅需0 码力 | 30 页 | 1.29 MB | 1 年前3 04. GraphQL in Chaos Mesh 2.0 - 李晨曦直接查询的状态,使用过程存在的一大障碍是噪音 过多。很多情况下 需要配合文本查询工具一起使用才能找到想要的信息。 当然,kubectl 提供了 json path 功能以对查询结果进行筛选,但它存在命令行交互不友好、复 杂、 难以阅读等问题。 上图为 kubectl 的 json path 使用样例 状态查询的障碍2 对于不可通过 kubernetes API 直接查询的状态,往往要通过创建 path,通过反 射生成结构体。 最后将结构体实例序列化成 yaml 格式打印。 Completion 由于查询状态有非常多的排列组合,我们依赖 GraphQL API 实现了丰富的动态自动补全。 后续的工作 强制 recover 目前我们的状态控制功能都集中在查询,而没有更改。后面最主要的工作之一就是 实现故障的强制恢 复,这涉及到 daemon 状态持久化,以及 API server 中的 mutations API。 Control Client API Server Target Pod mutations recover 命令简化 虽然我们有完备的查询路径自动补全,但很多常用状态还是需要更方便的命令来 查询。比如可以把 chaosctl log daemon 来作为命令 chaosctl get component:daemon/logs 的 alias。这种简化命令仅需0 码力 | 30 页 | 1.29 MB | 1 年前3
 Go Web编程Sqrt(2) = 1.414213562373095 `` 如何安装该应用,进入该目录执 行go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行 mathapp 也是输出如下内容 Hello, world. Sqrt(2) = 1.414213562373095 获取远程包 获取远程包 go语言有一个获取远程包的工具就是go links 目录 上一节: GO安装 下一节: GO 命令 14 1.3 Go 命令 1.3 Go 命令 Go 命令 Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。 go build go build 这个命 如果是http包,那么执行go doc net/http 查看某一个包里面的函数,那么执行godoc fmt Printf 也可以查看相应的代码,执行godoc -src fmt Printf 通过命令在命令行执行 godoc -http=:端口号 比如godoc -http=:8080。然后在浏览器中打开 127.0.0.1:8080,你将会看到一个golang.org的本地copy版本,通过它你可以查询pkg文档等其它内容。如果你设0 码力 | 295 页 | 5.91 MB | 1 年前3 Go Web编程Sqrt(2) = 1.414213562373095 `` 如何安装该应用,进入该目录执 行go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行 mathapp 也是输出如下内容 Hello, world. Sqrt(2) = 1.414213562373095 获取远程包 获取远程包 go语言有一个获取远程包的工具就是go links 目录 上一节: GO安装 下一节: GO 命令 14 1.3 Go 命令 1.3 Go 命令 Go 命令 Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令。 go build go build 这个命 如果是http包,那么执行go doc net/http 查看某一个包里面的函数,那么执行godoc fmt Printf 也可以查看相应的代码,执行godoc -src fmt Printf 通过命令在命令行执行 godoc -http=:端口号 比如godoc -http=:8080。然后在浏览器中打开 127.0.0.1:8080,你将会看到一个golang.org的本地copy版本,通过它你可以查询pkg文档等其它内容。如果你设0 码力 | 295 页 | 5.91 MB | 1 年前3
 使用Go与redis构建有趣的应用100 MB 1.25 MB 12 KB ⼀一百万,⼀一年年 3.65 GB 45.625 MB 4.32 MB ⼀一千万,⼀一年年 36.5 GB 456.25 MB 4.32 MB ⾃自动补全 autocomplete 示例例 示例例 示例例 示例例 原理理解释 原理理解释 > go 原理理解释 > go “google” “gmail” “gopher” “great” +1 补全过程 补全过程 > g 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g > go 补全过程 “gossip” > go 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g 分值 成员 320 “google” 280 “gopher” 255 “goodbye” 230 “gold” 188 “gossip” > go > gop 补全过程 分值 成员 3200 码力 | 176 页 | 2.34 MB | 1 年前3 使用Go与redis构建有趣的应用100 MB 1.25 MB 12 KB ⼀一百万,⼀一年年 3.65 GB 45.625 MB 4.32 MB ⼀一千万,⼀一年年 36.5 GB 456.25 MB 4.32 MB ⾃自动补全 autocomplete 示例例 示例例 示例例 示例例 原理理解释 原理理解释 > go 原理理解释 > go “google” “gmail” “gopher” “great” +1 补全过程 补全过程 > g 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g > go 补全过程 “gossip” > go 补全过程 分值 成员 320 “google” 300 “gmail” 280 “gopher” 278 “great” 210 “guide” > g 分值 成员 320 “google” 280 “gopher” 255 “goodbye” 230 “gold” 188 “gossip” > go > gop 补全过程 分值 成员 3200 码力 | 176 页 | 2.34 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常 量描述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一 个完整的常量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译 器会将下面的代码 1| const ( 2| X float32 B = "Go", "language" 7| C, _ 8| // 上一行中的空标识符是必需的(如果 9| // 上一行是一个不完整的常量描述的话)。 10 | ) 自动补全为 1| const ( 2| X float32 = 3.14 3| Y float32 = 3.14 4| Z float32 = 3.14 5| 6| A, B 是它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的 时候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多 个常量描述的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比 如,下面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个 常量被绑定的值。 1| package main 2| 3| func main()0 码力 | 821 页 | 956.82 KB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常 量描述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一 个完整的常量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译 器会将下面的代码 1| const ( 2| X float32 B = "Go", "language" 7| C, _ 8| // 上一行中的空标识符是必需的(如果 9| // 上一行是一个不完整的常量描述的话)。 10 | ) 自动补全为 1| const ( 2| X float32 = 3.14 3| Y float32 = 3.14 4| Z float32 = 3.14 5| 6| A, B 是它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的 时候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多 个常量描述的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比 如,下面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个 常量被绑定的值。 1| package main 2| 3| func main()0 码力 | 821 页 | 956.82 KB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常 量描述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一个 完整的常量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译器会 将下面的代码 const ( X float32 = 3 这里必须只有一个标识符 A, B = "Go", "language" C, _ // 上一行中的空标识符是必需的(如果 // 上一行是一个不完整的常量描述的话)。 ) 自动补全为 const ( X float32 = 3.14 Y float32 = 3.14 Z float32 = 3.14 A, B = "Go", "language" 它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时 候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个 常量描述的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比如, 下面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个常量被 绑定的值。 package main func main() {0 码力 | 608 页 | 1.08 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常 量描述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一个 完整的常量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译器会 将下面的代码 const ( X float32 = 3 这里必须只有一个标识符 A, B = "Go", "language" C, _ // 上一行中的空标识符是必需的(如果 // 上一行是一个不完整的常量描述的话)。 ) 自动补全为 const ( X float32 = 3.14 Y float32 = 3.14 Z float32 = 3.14 A, B = "Go", "language" 它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时 候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个 常量描述的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比如, 下面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个常量被 绑定的值。 package main func main() {0 码力 | 608 页 | 1.08 MB | 1 年前3
 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常量描 述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一个完整的常 量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译器会将下面的代码 1| const ( 2| X float32 "language" 第7章:常量和变量 39 7| C, _ 8| // 上一行中的空标识符是必需的(如果 9| // 上一行是一个不完整的常量描述的话)。 10| ) 自动补全为 1| const ( 2| X float32 = 3.14 3| Y float32 = 3.14 4| Z float32 = 3.14 5| 6| 的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时候,它 的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个常量描述 的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比如,下 面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个常量被绑定的 值。 1| package main 2| 3| func0 码力 | 591 页 | 21.40 MB | 1 年前3 Golang 101(Go语言101 中文版)  v1.21.a^uint(0) >> 32 == 0 这里,符号!=和==分别为不等于和等于比较运算符。 常量声明中的自动补全 在一个包含多个常量描述的常量声明中,除了第一个常量描述,其它后续的常量描 述都可以只包含标识符列表部分。 Go编译器将通过照抄前面最紧挨的一个完整的常 量描述来自动补全不完整的常量描述。 比如,在编译阶段,编译器会将下面的代码 1| const ( 2| X float32 "language" 第7章:常量和变量 39 7| C, _ 8| // 上一行中的空标识符是必需的(如果 9| // 上一行是一个不完整的常量描述的话)。 10| ) 自动补全为 1| const ( 2| X float32 = 3.14 3| Y float32 = 3.14 4| Z float32 = 3.14 5| 6| 的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时候,它 的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个常量描述 的常量声明有意义。 iota和常量描述自动补全相结合有的时候能够给Go编程带来很大便利。 比如,下 面是一个使用了这两个特性的例子。 请阅读代码注释以了解清楚各个常量被绑定的 值。 1| package main 2| 3| func0 码力 | 591 页 | 21.40 MB | 1 年前3
 1.3 七牛如何做HTTP服务测试http.Client  写测试案例的思路  – 但努力让代码更直白体现测试用意  Hello,  world!  Quick  start  语法结构  • 基于命令行文法  command  switch1  switch2  …  arg1  arg2  …   • 转义  – 如果参数包含空格或其他特殊字符,则可以: 0 码力 | 27 页 | 422.11 KB | 1 年前3 1.3 七牛如何做HTTP服务测试http.Client  写测试案例的思路  – 但努力让代码更直白体现测试用意  Hello,  world!  Quick  start  语法结构  • 基于命令行文法  command  switch1  switch2  …  arg1  arg2  …   • 转义  – 如果参数包含空格或其他特殊字符,则可以: 0 码力 | 27 页 | 422.11 KB | 1 年前3
 Go语言基础
Golang FundamentsGo语言入门资源 • 语言概览 – 官方Go指南,gotour – 系统的学习,go语言教程 • 程序结构 – 包/子包(main) • Go源代码 – 函数(main, init) • 命令行工具 • 编程参考与规范 – 官方文档”Effective Go/实效Go编程” – 官方文档,库参考文档, https://godoc.org/ • 中级资源 Ultimate Go – https://github0 码力 | 21 页 | 851.30 KB | 1 年前3 Go语言基础
Golang FundamentsGo语言入门资源 • 语言概览 – 官方Go指南,gotour – 系统的学习,go语言教程 • 程序结构 – 包/子包(main) • Go源代码 – 函数(main, init) • 命令行工具 • 编程参考与规范 – 官方文档”Effective Go/实效Go编程” – 官方文档,库参考文档, https://godoc.org/ • 中级资源 Ultimate Go – https://github0 码力 | 21 页 | 851.30 KB | 1 年前3
共 17 条
- 1
- 2














