- Go语言101
Go语言101
《Go语言101》是一本着墨于Go语法和语义的编程指导书(Go 1.13就绪)。这本书也搜集了很多Go编程中的的细节和讲解了一些底层实现原理(不含具体实现细节)。这本书的宗旨是尽量帮助Go程序员更深和更全面地理解Go。此书同时适合Go初学者和有一定经验的Go程序员阅读。
- 本书由老貘编写。
- English version is here.
- 此项目源代码同时托管在Gitlab和Github上。你可以将代码拉取到本地并在项目目录下运行
go run .
命令来启动一个本地服务器来阅读本书以获取更好的阅读体验。
2019/10/31:
- 改正了“删除子切片”例子代码中的一个错误。
- 更正了“延迟调用的函数值的估值时刻”的解释。
- "在正确的位置调用内置
recover
函数"一文改名为“详解panic/recover原理”。
2019/10/18: “表达式估值顺序规则”一文中对赋值语句中的表达式估值和赋值执行顺序的解释有不恰当之处。目前采用了一个新的更简单的描述来解释。
2019/09/30: 在“非类型安全指针”一文中添加了一个事实并指出本书在使用模式三:将一个非类型安全指针转换为一个uintptr值,然后此uintptr值参与各种算术运算,再将算术运算的结果uintptr值转回非类型安全指针一节中犯了一个严重的错误。(我决定撤回此勘误。)
目录:
- 关于Go语言101 - 为什么写这本书
- 致谢
- Go语言简介 - 为什么Go语言值得学习
- 官方Go SDK - 如何编译和运行Go程序
- Go编程入门
- 程序源代码基本元素介绍
- 关键字和标识符
- 基本类型和它们的值的字面表示形式
- 常量和变量 - 顺便介绍了类型不确定值和类型推断
- 运算操作符 - 介绍了更多的类型推断规则
- 函数声明和调用
- 代码包和包引入
- 表达式、语句和简单语句
- 基本流程控制语法
- 协程、延迟函数调用、以及恐慌和恢复
- Go类型系统
- Go类型系统概述 - 精通Go编程必读
- 指针
- 结构体
- 值部 - 为了更容易和更深刻地理解Go中的各种值
- 数组、切片和映射 - Go中的首要容器类型
- 字符串
- 函数 - 函数类型和函数值,以及变长参数个数函数
- 通道 - Go特色的并发同步方式
- 方法
- 接口 - 通过包裹不同具体类型的非接口值来实现反射和多态
- 类型内嵌 - 不同于继承的类型扩展方式
- 非类型安全指针
- 内置范型
- 反射 -
reflect
标准库包中提供的反射支持
- 一些专题
- 代码断行规则
- 更多关于延迟函数调用的知识点
- 一些恐慌/恢复用例
- 详解panic/recover原理 - 也解释了什么是“函数退出阶段”
- 代码块和标识符作用域
- 表达式估值顺序规则
- 值复制成本
- 边界检查消除
- 并发编程
- 并发同步概述
- 通道用例大全
- 如何优雅地关闭通道
- 其它并发同步技术 - 如何使用
sync
标准库包 - 原子操作 - 如何使用
sync/atomic
标准库包 - Go中的内存顺序保证
- 一些常见并发编程错误
- 内存相关
- 内存块
- 关于Go值的内存布局
- 一些可能的内存泄漏场景
- 一些总结
- 一些简单的总结
- 关于Go中的
nil
- 类型转换、赋值和值比较规则大全
- Go中的一些语法/语义例外
- 更多关于Go的知识
Go语言101项目目前同时托管在Github和Gitlab上。欢迎各位在这两个项目中通过提交bug和PR的方式来改进完善Go语言101中的各篇文章。
本书微信公众号名称为"Go 101"。每个工作日此公众号将尽量发表一篇和Go语言相关的原创短文。各位如果感兴趣,可以搜索关注一下。