主编推荐语
本书教你写高质量的Go代码,包括编程思维和实践技巧,共涵盖66个主题,助你事半功倍,快速成为专家!
内容简介
Go入门容易,精进难,如何才能像Go开发团队那样写出符合Go思维和语言惯例的高质量代码呢?
本书将从编程思维和实践技巧2个维度给出答案,帮助你在Go进阶的路上事半功倍。
编程思维层面
只有真正领悟了一门语言的设计哲学和编程思维,并能将之用于实践,才算精通了这门语言。本书从Go语言设计者的视角对Go背后的设计哲学和编程思想进行了梳理和分析,指引读者体会那些看似随意实则经过深思熟虑的设计背后的秘密。
实践技巧层面
实践技巧源于对Go开发团队和Go社区开发的高质量代码的阅读、挖掘和归纳,从项目结构、代码风格、语法及其实现、接口、并发、同步、错误与异常处理、测试与调试、性能优化、标准库、第三方库、工具链、Z佳实践、工程实践等多个方面给出了改善Go代码质量、写出符合 Go 思维和惯例的代码的有效实践。
全书的内容覆盖如下10个大类,共66个主题,字字珠玑,句句箴言。
(1)Go语言的一切
(2)项目结构、代码风格与标识符命名
(3)声明、类型、语句与控制结构
(4)函数与方法
(5)接口
(6)并发编程
(7)错误处理
(8)测试、性能剖析与调试
(9)标准库、反射与cgo
(10)工具链与工程实践
学完这本书,你将拥有和 Go专家一样的编程思维,写出符合Go惯例和风格的高质量代码,从众多 Go 初学者中脱颖而出,快速实现从Go新手到专家的转变!
目录
- 版权信息
- 作者简介
- 推荐语
- 推荐序
- 前言
- 第八部分 测试、性能剖析与调试
- 第40条 理解包内测试与包外测试的差别
- 40.1 官方文档的“自相矛盾”
- 40.2 包内测试与包外测试
- 第41条 有层次地组织测试代码
- 41.1 经典模式——平铺
- 41.2 xUnit家族模式
- 41.3 测试固件
- 第42条 优先编写表驱动的测试
- 42.1 Go测试代码的一般逻辑
- 42.2 表驱动的测试实践
- 42.3 表驱动测试的优点
- 42.4 表驱动测试实践中的注意事项
- 第43条 使用testdata管理测试依赖的外部数据文件
- 43.1 testdata目录
- 43.2 golden文件惯用法
- 第44条 正确运用fake、stub和mock等辅助单元测试
- 44.1 fake:真实组件或服务的简化实现版替身
- 44.2 stub:对返回结果有一定预设控制能力的替身
- 44.3 mock:专用于行为观察和验证的替身
- 第45条 使用模糊测试让潜在bug无处遁形
- 45.1 模糊测试在挖掘Go代码的潜在bug中的作用
- 45.2 go-fuzz的初步工作原理
- 45.3 go-fuzz使用方法
- 45.4 使用go-fuzz建立模糊测试的示例
- 45.5 让模糊测试成为“一等公民”
- 第46条 为被测对象建立性能基准
- 46.1 性能基准测试在Go语言中是“一等公民”
- 46.2 顺序执行和并行执行的性能基准测试
- 46.3 使用性能基准比较工具
- 46.4 排除额外干扰,让基准测试更精确
- 第47条 使用pprof对程序进行性能剖析
- 47.1 pprof的工作原理
- 47.2 使用pprof进行性能剖析的实例
- 第48条 使用expvar输出度量数据,辅助定位性能瓶颈点
- 48.1 expvar包的工作原理
- 48.2 自定义应用通过expvar输出的度量数据
- 48.3 输出数据的展示
- 第49条 使用Delve调试Go代码
- 49.1 关于调试,你首先应该知道的几件事
- 49.2 Go调试工具的选择
- 49.3 Delve调试基础、原理与架构
- 49.4 并发、Coredump文件与挂接进程调试
- 第九部分 标准库、反射与cgo
- 第50条 理解Go TCP Socket网络编程模型
- 50.1 TCP Socket网络编程模型
- 50.2 TCP连接的建立
- 50.3 Socket读写
- 50.4 Socket属性
- 50.5 关闭连接
- 第51条 使用net/http包实现安全通信
- 51.1 HTTPS:在安全传输层上运行的HTTP协议
- 51.2 HTTPS安全传输层的工作机制
- 51.3 非对称加密和公钥证书
- 51.4 对服务端公钥证书的校验
- 51.5 对客户端公钥证书的校验
- 第52条 掌握字符集的原理和字符编码方案间的转换
- 52.1 字符与字符集
- 52.2 Unicode字符集的诞生与UTF-8编码方案
- 52.3 字符编码方案间的转换
- 第53条 掌握使用time包的正确方式
- 53.1 时间的基础操作
- 53.2 时间的格式化输出
- 53.3 定时器的使用
- 第54条 不要忽略对系统信号的处理
- 54.1 为什么不能忽略对系统信号的处理
- 54.2 Go语言对系统信号处理的支持
- 54.3 使用系统信号实现程序的优雅退出
- 第55条 使用crypto下的密码学包构建安全应用
- 55.1 Go密码学包概览与设计原则
- 55.2 分组密码算法
- 55.3 公钥密码
- 55.4 单向散列函数
- 55.5 消息认证码
- 55.6 数字签名
- 55.7 随机数生成
- 第56条 掌握bytes包和strings包的基本操作
- 56.1 查找与替换
- 56.2 比较
- 56.3 分割
- 56.4 拼接
- 56.5 修剪与变换
- 56.6 快速对接I/O模型
- 第57条 理解标准库的读写模型
- 57.1 直接读写字节序列
- 57.2 直接读写抽象数据类型实例
- 57.3 通过包裹类型读写数据
- 第58条 掌握unsafe包的安全使用模式
- 58.1 简洁的unsafe包
- 58.2 unsafe包的典型应用
- 58.3 正确理解unsafe.Pointer与uintptr
- 58.4 unsafe.Pointer的安全使用模式
- 第59条 谨慎使用reflect包提供的反射能力
- 59.1 Go反射的三大法则
- 59.2 反射世界的入口
- 59.3 反射世界的出口
- 59.4 输出参数、interface{}类型变量及反射对象的可设置性
- 第60条 了解cgo的原理和使用开销
- 60.1 Go调用C代码的原理
- 60.2 在Go中使用C语言的类型
- 60.3 在Go中链接外部C库
- 60.4 在C中使用Go函数
- 60.5 使用cgo的开销
- 60.6 使用cgo代码的静态构建
- 第十部分 工具链与工程实践
- 第61条 使用module管理包依赖
- 61.1 Go语言包管理演进回顾
- 61.2 Go module:Go包依赖管理的生产标准
- 61.3 Go module代理
- 61.4 升级module的主版本号
- 第62条 构建最小Go程序容器镜像
- 62.1 镜像:继承中的创新
- 62.2 镜像是个筐:初学者的认知
- 62.3 理性回归:builder模式的崛起
- 62.4 “像赛车那样减重”:追求最小镜像
- 62.5 “要有光”:对多阶段构建的支持
- 第63条 自定义Go包的导入路径
- 63.1 govanityurls
- 63.2 使用govanityurls
- 第64条 熟练掌握Go常用工具
- 64.1 获取与安装
- 64.2 包或module检视
- 64.3 构建
- 64.4 运行与诊断
- 64.5 格式化与静态代码检查
- 64.6 重构
- 64.7 查看文档
- 64.8 代码导航与洞察
- 第65条 使用go generate驱动代码生成
- 65.1 go generate:Go原生的代码生成“驱动器”
- 65.2 go generate的工作原理
- 65.3 go generate的应用场景
- 第66条 牢记Go的常见“陷阱”
- 66.1 语法规范类
- 66.2 标准库类
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。