Mastering_Go_ZH_CN
  • 介绍
  • [0 前言]
    • 00.1 前言
    • 00.2 面向读者
    • 00.3 章节概览
    • 00.4 更多信息
      • 00.4.1 代码规范约定
  • [1 Go与操作系统]
    • 01.1 本书结构
    • 01.2 Go的历史
    • 01.3 为什么是Go
    • 01.4 Go的优点
      • 01.4.1 Go是完美的么
  • [2 Go内部机制]
    • 02.1 本章概述
    • 02.2 编译器
    • 02.3 垃圾回收
      • 02.3.1 三色算法
      • 02.3.2 垃圾回收器背后的更多操作
      • 02.3.3 Unsafe code
      • 02.3.4 关于unsafe包
      • 02.3.5 另一个usafe包的例子
    • 02.5 C中调用Go函数
      • 02.5.1 Go Package
      • 02.5.2 C代码
    • 02.6 defer关键字
    • 02.7 Panic和Recover
  • [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 本章小结
  • 4 组合类型的使用
    • 04.1 关于组合类型
    • 04.2 结构体
      • 04.2.1 结构体指针
      • 04.2.2 使用new关键字
    • 04.3 元组
    • 04.4 正则表达式与模式匹配
      • 04.4.1 理论知识
      • 04.4.2 简单的正则表达式示例
      • 04.4.3 高级的正则表达式示例
      • 04.4.4 正则匹配IPv4地址
    • 04.5 字符串
      • 04.5.1 rune是什么?
      • 04.5.2 关于Unicode的包
      • 04.5.3 关于字符串处理的包
    • 04.6 switch语句
    • 04.7 计算Pi的精确值
    • 04.8 实现简单的K-V存储
    • 04.9 延展阅读
    • 04.10 练习
    • 04.11 本章小结
  • 5 数据结构
    • 05.1 图和节点
    • 05.2 算法复杂度
    • 05.3 Go 语言中的二叉树
      • 05.3.1 Go 语言实现二叉树
      • 05.3.2 二叉树的优点
    • 05.4 Go 语言中的哈希表
      • 05.4.1 Go 语言实现哈希表
      • 05.4.2 实现查找功能
      • 05.4.3 哈希表的优点
    • 05.5 Go 语言中的链表
      • 05.5.1 Go 语言实现链表
      • 05.5.2 链表的优点
    • 05.6 Go 语言中的双向链表
      • 05.6.1 Go 语言实现双向链表
      • 05.6.2 双向链表的优点
    • 05.7 Go 语言中的队列
      • 05.7.1 Go 语言实现队列
    • 05.8 Go 语言中的栈
      • 05.8.1 Go 语言实现栈
    • 05.9 container 包
      • 05.9.1 使用 container/heap
      • 05.9.2 使用 container/list
      • 05.9.3 使用 container/ring
    • 05.10 生成随机数
      • 05.10.1 生成随机字符串
    • 05.11 延展阅读
    • 05.12 练习
    • 05.13 本章小结
  • 6 Go package中不为人知的知识
    • 06.1 关于Go packages
    • 06.2 Go函数
      • 06.2.1 匿名函数
      • 06.2.2 多返回值的函数
      • 06.2.3 可命名的函数返回值
      • 06.2.4 参数为指针的函数
      • 06.2.5 返回值为指针的函数
      • 06.2.6 闭包
      • 06.2.7 函数作为参数
    • 06.3 设计你的Go packages
  • [7 反射和接口]
    • 07.1 类型方法
    • 07.2 Go的接口
    • 07.3 类型断言
    • 07.4 设计接口
      • 07.4.1 接口的使用
      • 07.4.2 Switch用于类型判断
    • 07.5 反射
      • 07.5.1 使用反射的简单示例
      • 07.5.2 反射进阶
      • 07.5.3 反射的三个缺点
    • 07.6 Go的OOP思想
    • 07.7 延展阅读
    • 07.8 练习
    • 07.9 本章小结
  • 8 Go UNIX系统编程
    • 08.1 关于UNIX进程
    • 08.2 flag包
    • 08.3 io.Reader和io.Writer接口
      • 08.3.1 缓冲和无缓冲的文件输入和输出
    • 08.4 bufio包
    • 08.5 读取文本文件
      • 08.5.1 逐行读取文本文件
      • 08.5.2 逐词读取文本文件
      • 08.5.3 逐字符读取文本文件
      • 08.5.4 从/dev/random中读取
    • 08.6 从文件中读取所需的数据量
    • 08.7 为什么我们使用二进制格式
    • 08.8 读取CSV文件
    • 08.9 写入文件
    • 08.10 从磁盘加载和保存数据
    • 08.11 再看strings包
    • 08.12 关于bytes包
    • 08.13 文件权限
    • 08.14 处理Unix信号
      • 08.14.1 处理两种信号
      • 08.14.2 处理所有信号
    • 08.15 Unix管道编程
    • 08.16 遍历目录树
    • 08.17 使用ePBF
    • 08.18 关于syscall.PtraceRegs
    • 08.19 跟踪系统调用
    • 08.20 User ID和group ID
    • 08.21 其他资源
    • 08.22 练习
    • 08.23 总结
  • 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 本章小结
  • 10 Go 并发-进阶讨论
    • 10.1 重温调度器
      • 10.1.1 环境变量 GOMAXPROCS
    • 10.2 select关键字
    • 10.3 goroutine超时检查的两种方式
      • 10.3.1 方式1
      • 10.3.2 方式2
    • 10.4 重温Channel(通道)
      • 10.4.1 信号通道
      • 10.4.2 可缓冲通道
      • 10.4.3 值为nil的通道
      • 10.4.4 传送channel的通道
      • 10.4.5 指定通道的执行顺序
    • 10.5 通过共享变量来共享内存
      • 10.5.1 sync.Mutex类型
        • 10.5.1.1 忘记解锁mutex的后果
      • 10.5.2 sync.RWMutex类型
      • 10.5.3 通过goroutine共享内存
    • 10.6 竞争状态
    • 10.7 关于context包
      • 10.7.1 context使用的高级示例
      • 10.7.2 工作池
    • 10.8 延展阅读
    • 10.9 练习
    • 10.10 本章小结
  • 11 代码测试,优化及分析
    • 11.1 本章使用的Go版本
    • 11.1.1 1.10和1.9版本对比
    • 11.2 安装beta或者RC版本
    • 11.3 关于优化
    • 11.4 优化你的Go代码
    • 11.5 分析Go代码
      • 11.5.1 标准库net/http/pprof
      • 11.5.2 代码分析示例
      • 11.5.3 用于分析的第三方包
      • 11.5.4 Go分析器的web接口
        • 11.5.4.1 使用web接口的分析示例
        • 11.5.4.2 Graphviz快览
    • 11.6 go tool的代码追踪
    • 11.7 测试
      • 11.7.1 编程测试代码
    • 11.8 基准测试
      • 11.8.1 基准测试示例
      • 11.8.2 错误的基准测试函数
    • 11.9 基准测试的缓冲写入
    • 11.10 揪出隐藏的代码
    • 11.11 交叉编译
    • 11.12 创建示例函数
    • 11.13 生成文档
    • 11.14 延展阅读
    • 11.15 练习
    • 11.16 本章小结
  • 12 Go网络编程基础
    • 12.1 关于net/http,net和http.RoundTripper
      • 12.1.1 http.Response类型
      • 12.1.2 http.Request类型
      • 12.1.3 http.Transport类型
    • 12.2 关于TCP/IP
    • 12.3 关于IPv4和IPv6
    • 12.4 命令行工具netcat
    • 12.5 读取网络接口的配置文件
    • 12.6 实现DNS查询
      • 12.6.1 获取域名的 NS记录
      • 12.6.2 获取域名的 MX 记录
    • 12.7 Go实现web服务器
      • 12.7.1 分析HTTP服务
      • 12.7.2 用Go创建网站
    • 12.8 追踪 HTTP
      • 12.8.1 测试 HTTP handler
    • 12.9 Go实现web客户端
      • 12.9.1 Go web客户端进阶
    • 12.10 HTTP连接超时
      • 12.10.1 SetDeadline 介绍
      • 12.10.2 服务端设置超时时间
      • 12.10.3 设置超时的另外一种方法
    • 12.11 抓包工具Wireshark和tshark
    • 12.12 延展阅读
    • 12.13 练习
    • 12.14 本章小结
  • 13 网络编程 - 构建服务器与客户端
    • 13.1 Go 标准库-net
    • 13.2 TCP 客户端
      • 13.2.1 另一个版本的 TCP 客户端
    • 13.3 TCP 服务器
      • 13.3.1 另一个版本的 TCP 服务器
    • 13.4 UDP 客户端
    • 13.5 UDP 服务器
    • 13.6 并发 TCP 服务器
      • 13.6.1 简洁的并发TCP服务器
    • 13.7 远程调用(RPC)
      • 13.7.1 RPC 客户端
      • 13.7.2 RPC 服务器
    • 13.8 底层网络编程
      • 13.8.1 获取ICMP数据
    • 13.9 接下来的任务
    • 13.10 延展阅读
    • 13.11 练习
    • 13.12 本章小节
Powered by GitBook
On this page
  • Mastering_Go_ZH_CN
  • =======

Was this helpful?

介绍

Next[0 前言]

Last updated 3 years ago

Was this helpful?

本书已翻译完成,欢迎阅读GitBook,提出宝贵的修改意见😘。

在线阅读:

PDF下载:移步release中下载PDF,离线阅读

英文第二版强势来袭!我们也在招募热爱学习的你,一起来玩转,第二版项目地址:https://github.com/hantmac/Mastering_Go_Second_Edition_Zh_CN

Mastering_Go_ZH_CN

《Mastering GO》


交流社区

有兴趣的读者可关注公众号Go_Official_Blog 了解更多官方资讯。


翻译进度

持续更新中。。。。


=======

支持本书

如果你喜欢本书 《玩转 Go》,你可以参与到本书的翻译或纠正工作中来,具体请联系【Jack E-mail:hantmac@outlook.com】,一同完善本书并帮助壮大 Go 语言在国内的学习群体,给大家提供更好的学习资源。


规则&&Fork&&PR

  • 章节命名规则:举例,第一章第一节,01.1.md,如果第一节下面还有分支,01.1.1,依次类推;

  • 联系邮箱,取得电子版,获得安排的翻译章节,Fork分支,提交PR;

  • 由多人审核后,合并


致谢

  • 本书原作者:Mihalis Tsoukalos

  • 参与翻译人员


授权许可


开始阅读


Go学习资料及社区(持续更新中。。。)

本书适用于Golang程序员。您之前应该阅读有关Go的介绍性书籍,或者已经完成了。本书的内容包括但不限于并发、网络编程、垃圾回收、组合、GO UNIX系统编程、基本数据类型(Array,Slice,Map)、GO源码、反射,接口,类型方法等高级概念。阅读本书需要一定的编程经验。如果你在工作中使用Go或者业余时间爱好GO,那么这本书一定会让你对GO的理解更上一层楼。

除特别声明外,本书中的内容使用 (创作共用 署名-相同方式共享3.0 许可协议)授权,代码遵循 (3 项条款的 BSD 许可协议)。

支持 MySQL、PostgreSQL、SQLite3 以及 MsSQL

MongoDB 官方推荐驱动

全功能 ORM (无限接近) 支持 MySQL、PostgreSQL、SQLite3 以及 MsSQL

Go By Example
目录
chapter 0 前言
00.1 前言
00.2 面向读者
00.3 章节概览
00.4 更多信息
00.4.1 代码规范约定
chapter 1 Go与操作系统
01.1 本书结构
01.2 Go的历史
01.3 为什么是Go
01.4 Go的优点
01.4.1 Go是完美的么
chapter 2 Go内部机制
02.1 本章概述
02.2 编译器
02.3 垃圾回收
02.3.1 三色算法
02.3.2 垃圾回收器背后的更多操作
02.3.3 Unsafe code
02.3.4 关于unsafe包
02.3.5 另一个usafe包的例子
02.5 C中调用Go函数
02.5.1 Go Package
02.5.2 C代码
02.6 defer关键字
02.7 Panic和Recover
chapter 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 本章小结
chapter4 组合类型的使用
04.1 关于组合类型
04.2 结构体
04.2.1 结构体指针
04.2.2 使用new关键字
04.3 元组
04.4 正则表达式与模式匹配
04.4.1 理论知识
04.4.2 简单的正则表达式示例
04.4.3 高级的正则表达式示例
04.4.4 正则匹配IPv4地址
04.5 字符串
04.5.1 rune是什么?
04.5.2 关于Unicode的包
04.5.3 关于字符串处理的包
04.6 switch语句
04.7 计算Pi的精确值
04.8 实现简单的K-V存储
04.9 延展阅读
04.10 练习
04.11 本章小结
chapter5 数据结构
05.1 图和节点
05.2 算法复杂度
05.3 Go 语言中的二叉树
05.3.1 Go 语言实现二叉树
05.3.2 二叉树的优点
05.4 Go 语言中的哈希表
05.4.1 Go 语言实现哈希表
05.4.2 实现查找功能
05.4.3 哈希表的优点
05.5 Go 语言中的链表
05.5.1 Go 语言实现链表
05.5.2 链表的优点
05.6 Go 语言中的双向链表
05.6.1 Go 语言实现双向链表
05.6.2 双向链表的优点
05.7 Go 语言中的队列
05.7.1 Go 语言实现队列
05.8 Go 语言中的栈
05.8.1 Go 语言实现栈
05.9 container 包
05.9.1 使用 container/heap
05.9.2 使用 container/list
05.9.3 使用 container/ring
05.10 生成随机数
05.10.1 生成随机字符串
05.11 延展阅读
05.12 练习
05.13 本章小结
chapter 6 Go package中不为人知的知识
chapter 6.1 关于Go packages
chapter 6.2 Go函数
chapter 6.2.1 匿名函数
chapter 6.2.2 多返回值的函数
chapter 6.2.3 可命名的函数返回值
chapter 6.2.4 参数为指针的函数
chapter 6.2.5 返回值为指针的函数
chapter 6.2.6 闭包
chapter 6.2.7 函数作为参数
chapter 6.3 设计你的Go packages
chapter 7 反射和接口
07.1 类型方法
07.2 Go的接口
07.3 类型断言
07.4 设计接口
07.4.1 接口的使用
07.4.2 Switch用于类型判断
07.5 反射
07.5.1 使用反射的简单示例
07.5.2 反射进阶
07.5.3 反射的三个缺点
07.6 Go的OOP思想
07.7 延展阅读
07.8 练习
07.9 本章小结
chapter 8 Unix系统操作
08.1 关于Unix进程
08.2 flag包
08.3 io.Reader和io.Writer接口
08.3.1 缓冲和无缓冲的文件输入和输出
08.4 bufio包
08.5 读取文本文件
08.5.1 逐行读取文本文件
08.5.2 逐词读取文本文件
08.5.3 逐字符读取文本文件
08.5.4 从/dev/random中读取
08.6 从文件中读取所需的数据量
08.7 为什么我们使用二进制格式
08.8 读取CSV文件
08.9 写入文件
08.10 从磁盘加载和保存数据
08.11 再看strings包
08.12 关于bytes包
08.13 文件权限
08.14 处理Unix信号
08.14.1 处理两种信号
08.14.2 处理所有信号
08.15 Unix管道编程
08.16 遍历目录树
08.17 使用ePBF
08.18 关于syscall.PtraceRegs
08.19 跟踪系统调用
08.20 User ID和group ID
08.21 其他资源
08.22 练习
08.23 总结
chapter 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 本章小结
chapter 10 Go 并发-进阶讨论
10.1 重温调度器
10.1.1 环境变量 GOMAXPROCS
10.2 select关键字
10.3 goroutine超时检查的两种方式
10.3.1 方式1
10.3.2 方式2
10.4 重温Channel(通道)
10.4.1 信号通道
10.4.2 可缓冲通道
10.4.3 值为nil的通道
10.4.4 传送channel的通道
10.4.5 指定通道的执行顺序
10.5 通过共享变量来共享内存
10.5.1 sync.Mutex 类型
10.5.1.1 忘记解锁mutex的后果
10.5.2 sync.RWMutex类型
10.5.3 通过goroutine共享内存
10.6 竞争状态
10.7 关于context包
10.7.1 context使用的高级示例
10.7.2 工作池
10.8 延展阅读
10.9 练习
10.10 本章小结
chapter 11 代码测试,优化以及分析
11.1 本章使用的Go版本
11.1.1 1.10和1.9的版本对比
11.2 安装beta或者RC版本
11.3 关于优化
11.4 优化你的Go代码
11.5 分析Go代码
11.5.1 标准库net/http/pprof
11.5.2 代码分析示例
11.5.3 用于分析的第三方包
11.5.4 Go分析器的web接口
11.5.4.1 使用web接口的分析示例
11.5.4.2 Graphviz快览
11.6 go tool的代码追踪
11.7 测试
11.7.1 编程测试代码
11.8 基准测试
11.8.1 基准测试示例
11.8.2 错误的基准测试函数
11.9 基准测试的缓冲写入
11.10 揪出隐藏的代码
11.11 交叉编译
11.12 创建示例函数
11.13 生成文档
11.14 延展阅读
11.15 练习
11.16 本章小结
chapter 12 Go网络编程基础
12.1 关于net/http,net和http.RoundTripper
12.1.1 http.Response类型
12.1.2 http.Request类型
12.1.3 http.Transport类型
12.2 关于TCP/IP
12.3 关于IPv4和IPv6
12.4 命令行工具netcat
12.5 读取网络接口的配置文件
12.6 实现DNS查询
12.6.1 获取域名的 NS 记录
12.6.2 获取域名的 MX 记录
12.7 Go实现web服务器
12.7.1 分析HTTP服务
12.7.2 用Go创建网站
12.8 追踪 HTTP
12.8.1 测试 HTTP handler
12.9 Go实现web客户端
12.9.1 Go web客户端进阶
12.10 HTTP连接超时
12.10.1 SetDeadline 介绍
12.10.2 服务端设置超时时间
12.10.3 设置超时的另外一种方法
12.11 抓包工具Wireshark和tshark
12.12 延展阅读
12.13 练习
12.14 本章小结
chapter 13 网络编程 - 构建服务器与客户端
13.1 Go 标准库-net
13.2 TCP 客户端
13.2.1 另一个版本的 TCP 客户端
13.3 TCP 服务器
13.3.1 另一个版本的 TCP 服务器
13.4 UDP 客户端
13.5 UDP 服务器
13.6 并发 TCP 服务器
13.6.1 简洁的并发TCP服务器
13.7 远程调用(RPC)
13.7.1 RPC 客户端
13.7.2 RPC 服务器
13.8 底层网络编程
13.8.1 获取ICMP数据
13.9 接下来的任务
13.10 延展阅读
13.11 练习
13.12 本章小结
Jeremy
xionghui
leeweir
songxuexian
tangjun1990
glbrtchen
wskdsgcf
mark1995
themoonbear
klew
foxxnuaa
luobangkui
CC BY-SA 3.0 License
BSD 3-Clause License
Go By Example 英文网站
Go By Example 中文网站
GOCN Forum
Go语言中文网
Go walker 强大的Go在线API文档
jsonTOGo 好用的json转go struct工具
Go web框架beego
官方代码规范指导
xorm
mgo
gorm
Mastering_Go_ZH_CN