# Go语言101

《Go语言101》是一本着墨于Go语法语义（除了自定义泛型）以及运行时相关知识点的编程指导书。 此书旨在尽可能地帮助Go程序员更深更全面地理解Go语言。 此书也搜集了Go语言和Go编程中的很多细节，其中有一些在官方文档中从未提及。 此书同时适合Go初学者和有一定经验的Go程序员阅读。

本书目前已经Go 1.23就绪（更新历史）。

（大约500页，350+代码示例，101+细节介绍）

本书可以在线免费阅读。

请关注本书微信公众号（在微信中搜素“Go 101“或者扫描本网站首页中展示的公众号二维码）以获得《Go语言101》系列丛书电子版下载途径。

从2016年7月开始，老貘（本书作者）开始编写《Go语言101》丛书和维护此Go101.org网站。 目前，各种改进和新的内容仍在源源不断地加入本丛书和此网站。 你的赞赏是本系列丛书和Go101.org网站不断增容和维护的动力。

赞赏二维码和其它联系信息见页底。

感谢Renee French和Rob Pike授权将此幻灯片中的可爱的地鼠图片使用在本书的封面中。

The English version of this book is available here.

### 目录：

- 关于《Go语言101》 - 为什么写这本书
- 致谢

- Go语言简介 - 为什么Go语言值得学习
- Go官方工具链 - 如何编译和运行Go程序

- Go编程入门
  - 程序源代码基本元素介绍
  - 关键字和标识符
  - 基本类型和它们的字面量表示
  - 常量和变量 - 顺便介绍了类型不确定值和类型推断
  - 运算操作符 - 顺便介绍了更多的类型推断规则
  - 函数声明和调用
  - 代码包和包引入
  - 表达式、语句和简单语句
  - 基本流程控制语法
  - 协程、延迟函数调用、以及恐慌和恢复

- Go类型系统
  - Go类型系统概述 - 精通Go编程必读
  - 指针
  - 结构体
  - 值部 - 为了更容易和更深刻地理解Go中的各种值
  - 数组、切片和映射 - Go中的首要容器类型
  - 字符串
  - 函数 - 函数类型和函数值，以及变长参数个数函数
  - 通道 - Go特色的并发同步方式
  - 方法
  - 接口 - 通过包裹不同具体类型的非接口值来实现反射和多态
  - 类型内嵌 - 不同于继承的类型扩展方式
  - 非类型安全指针
  - 泛型 - 如何使用和解读组合类型
  - 反射 - `reflect`标准库包中提供的反射支持

- 一些专题
  - 代码断行规则
  - 更多关于延迟函数调用的知识点
  - 一些恐慌/恢复用例
  - 详解panic/recover原理 - 也解释了什么是“函数退出阶段”
  - 代码块和标识符作用域
  - 表达式估值顺序规则
  - 值复制成本
  - 边界检查消除

- 并发编程
  - 并发同步概述
  - 通道用例大全
  - 如何优雅地关闭通道
  - 其它并发同步技术 - 如何使用`sync`标准库包
  - 原子操作 - 如何使用`sync/atomic`标准库包
  - Go中的内存顺序保证
  - 一些常见并发编程错误

- 内存相关
  - 内存块
  - 关于Go值的内存布局
  - 一些可能的内存泄漏场景

- 一些总结
  - 一些简单的总结
  - 关于Go中的`nil`
  - 类型转换、赋值和值比较规则大全
  - Go中的一些语法/语义例外
  - Go细节101
  - Go问答101
  - Go技巧101

- 更多关于Go的知识