# Go程序优化101

本书将列出一些Go编程中的一些性能优化技巧和建议。 大致包括以下几方面的内容：

- 如何消耗更少的CPU资源；
- 如何消耗更少的内存；
- 如何减少内存开辟；
- 如何控制内存开辟位置；
- 如何降低垃圾回收压力等。

（约150页，75+优化建议）

本书目前尚未免费阅读。 请在微信中搜素“Go 101“或者扫描本网站首页中展示的公众号二维码关注“Go 101”微信公众号。 该微信公众号将时不时地免费放出一些章节。

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

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

感谢Olexandr Shalakhin授权使用这些可爱的地鼠图片。 其中一张图片使用在本书的封面中。

The English version of this book is available here.

### 目录：

- 致谢
- 关于《Go程序优化101》
- 值部和值尺寸

- 值尺寸
- 内存对齐
- 结构体字节填充
- 避免大复制成本

- 内存分配

- 内存块和内存分配区域
- 如何减少内存分配量和次数

- 栈、堆和逃逸分析

- 逃逸分析
- 如何控制内存分配区域
- 栈增长和收缩
- 如何降低栈增长次数

- 垃圾回收

- 垃圾回收步幅控制
- 如何降低垃圾回收压力
- 控制垃圾回收频率

- 指针

- 3 事实和建议

- 结构体

- 3 事实和建议

- 数组和切片

- 11 事实和建议

- 字符串和字节切片

- 10 事实和建议

- 边界检查消除（Bound Check Eliminate，BCE）

- BCE起作用的情形
- BCE不起作用的情形
- BCE需要给出暗示才能起作用的情形

- 映射

- 7 事实和建议

- 通道

- 3 事实和建议

- 函数

- 如何尽量使一个函数可被内联
- 如何使一个函数不可被内联
- 指针和非指针参数对性能的影响
- 具名和匿名返回结果对性能的影响
- 10+ 事实和建议

- 接口

- 值装箱成本
- 3+ 事实和建议