介绍 1 Go与操作系统 01.1 Go的历史 01.2 Go的未来 01.3 Go的优点 01.3.1 Go是完美的么 01.3.2 什么是预处理器 01.3.3 godoc 01.4 编译Go代码 2 理解 Go 的内部构造 Go 编译器 Go 的垃圾回收 三色算法 有关 Go 垃圾收集器操作的更多信息 Maps, silces 与 Go 垃圾回收器 Unsafe code 有关 unsafe 包 另一个 usafe 包的例子 从 Go 调用 C 代码 在同一文件用 Go 调用 C 代码 在单独的文件用 Go 调用 C 代码 从 C 调用 Go 代码 Go 包 C 代码 defer 关键字 用 defer 打印日志 Panic 和 Recover 单独使用 Panic 函数 两个好用的 UNIX 工具 strace dtrace 配置 Go 开发环境 go env 命令 Go 汇编器 节点树 进一步了解 Go 构建 创建 WebAssembly 代码 对 Webassembly 的简单介绍 为什么 WebAssembly 很重要 Go 与 WebAssembly 示例 使用创建好的 WebAssembly 代码 Go 编码风格建议 练习和相关链接 本章小结 3 Go基本数据类型 03.1 Go循环 03.1.1 for循环 03.1.2 while循环 03.1.3 range关键字 03.1.4 for循环代码示例 03.3 Go切片 03.3.1 切片基本操作 03.3.2 切片的扩容 03.3.3 字节切片 03.3.4 copy()函数 03.3.5 多维切片 03.3.6 使用切片的代码示例 03.3.7 使用sort.Slice()排序 03.4 Go 映射(map) 03.4.1 Map值为nil的坑 03.4.2 何时该使用Map? 03.5 Go 常量 03.5.1 常量生成器:iota 03.6 Go 指针 03.7 时间与日期的处理技巧 03.7.1 解析时间 03.7.2 解析时间的代码示例 03.7.3 解析日期 03.7.4 解析日期的代码示例 03.7.5 格式化时间与日期 03.8 延伸阅读 03.9 练习 03.10 本章小结 8 Unix 系统编程 08.1 关于 Unix 进程 08.2 flag 包 08.3 viper 包 08.3.1 一个简单的 viper 实例 08.3.2 从 flag 转到 viper 08.3.3 读取 JSON 配置文件 08.3.4 读取 YAML 配置文件 9 并发-Goroutines,Channel和Pipeline 09.1 关于进程,线程和Go协程 09.1.1 Go调度器 09.1.2 并发与并行 09.2 Goroutines 09.2.1 创建一个Goroutine 09.2.2 创建多个Goroutine 09.3 优雅地结束goroutines 09.3.1 当Add()和Done()的数量不匹配时会发生什么? 09.4 Channel(通道) 09.4.1 通道的写入 09.4.2 从通道接收数据 09.4.3 通道作为函数参数传递 09.5 管道 09.6 延展阅读 09.7 练习 09.8 本章小结