Go语言学习指南:惯例模式与编程实践(第2版)
Go语言学习指南:惯例模式与编程实践(第2版)
Jon Bodner
邵帅, 于鑫蕾, 任照松 等译
出版时间:2025年10月
页数:396
“Go语言非常独特,即使经验丰富的程序员也必须刻意忘掉某些固有思维,以完全不同的方式思考软件。本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。”
——Aaron Schlesinger
微软高级工程师

Go语言已迅速成为构建Web服务的首选语言。市面上有大量教程,但向具备其他编程语言经验的开发者传授Go语言的语法,仅靠这些教程还远远不够,因为它们并未教授Go语言的惯用写法,导致开发者最终往往会套用在Go语言环境中毫无意义的代码模式。而本实用指南将为你提供必要的背景知识,助你编写清晰、地道的Go语言代码。
无论你拥有何种程度的开发经验,都能通过本书学会以Go开发者的思维模式思考。作者Jon Bodner不仅介绍了资深Go开发者所采用的设计模式,还深入探讨了使用这些模式的根本原因。相较上一版,本书还新增了一章内容,专门讲解Go语言工具集。
本书将帮助你:
● 编写地道的Go语言代码并设计Go语言项目。
● 理解Go语言各项设计决策背后的原因。
● 为个人开发者或开发团队搭建Go语言开发环境。
● 学习如何以及何时使用反射(reflection)、unsafe与cgo。
● 探究Go语言的特性如何确保该语言能够高效运行。
● 明确哪些特性应谨慎使用或完全不用。
● 提升程序性能、优化内存使用并减少垃圾回收的开销。
● 学习如何使用Go语言的高级开发工具。
  1. 前言
  2. 第1章 设置你的Go环境
  3. 1.1 安装Go工具
  4. 1.2 你的第一个Go程序
  5. 1.3 选择你的工具
  6. 1.4 Makefile文件
  7. 1.5 Go兼容性承诺
  8. 1.6 保持更新
  9. 1.7 练习
  10. 1.8 总结
  11. 第2章 基础类型和变量声明
  12. 2.1 基础类型
  13. 2.2 var与:=的区别
  14. 2.3 使用const
  15. 2.4 有类型常量和无类型常量
  16. 2.5 未使用的变量
  17. 2.6 命名变量和常量
  18. 2.7 练习
  19. 2.8 总结
  20. 第3章 复合类型
  21. 3.1 数组类型—因不灵活而较少被使用
  22. 3.2 切片类型
  23. 3.3 字符串、字符和字节
  24. 3.4 映射类型
  25. 3.5 结构体类型
  26. 3.6 练习
  27. 3.7 总结
  28. 第4章 代码块、影子变量和控制结构
  29. 4.1 代码块
  30. 4.2 影子变量
  31. 4.3 if语句
  32. 4.4 for语句
  33. 4.5 switch语句
  34. 4.6 goto语句
  35. 4.7 练习
  36. 4.8 总结
  37. 第5章 函数
  38. 5.1 声明和调用函数
  39. 5.2 函数也是值
  40. 5.3 闭包
  41. 5.4 defer
  42. 5.5 Go语言的值传递
  43. 5.6 练习
  44. 5.7 总结
  45. 第6章 指针
  46. 6.1 快速指针入门
  47. 6.2 不畏惧指针
  48. 6.3 指针表示可变参数
  49. 6.4 指针是最后的手段
  50. 6.5 指针传递的性能
  51. 6.6 零值与无值的区别
  52. 6.7 映射与切片的区别
  53. 6.8 切片作为缓冲区
  54. 6.9 减少垃圾回收的负担
  55. 6.10 垃圾回收器调优
  56. 6.11 练习
  57. 6.12 总结
  58. 第7章 类型、方法和接口
  59. 7.1 语言中的类型
  60. 7.2 方法
  61. 7.3 iota有时用于枚举
  62. 7.4 使用内嵌进行组合
  63. 7.5 内嵌不是继承
  64. 7.6 接口概览
  65. 7.7 接口是类型安全的鸭子类型
  66. 7.8 内嵌与接口
  67. 7.9 接收接口,返回结构体
  68. 7.10 接口和nil
  69. 7.11 接口是可比较的
  70. 7.12 空接口
  71. 7.13 类型断言和type-switch
  72. 7.14 谨慎使用类型断言和type-switch
  73. 7.15 函数类型实现接口
  74. 7.16 隐式接口实现依赖注入
  75. 7.17 Wire
  76. 7.18 Go并非传统意义上的面向对象语言
  77. 7.19 练习
  78. 7.20 总结
  79. 第8章 泛型
  80. 8.1 泛型减少重复代码并增强类型安全性
  81. 8.2 在Go中引入泛型
  82. 8.3 泛型函数抽象算法
  83. 8.4 泛型和接口
  84. 8.5 使用类型术语指定运算符
  85. 8.6 类型推断与泛型
  86. 8.7 类型元素限制常量
  87. 8.8 结合泛型函数与泛型数据结构
  88. 8.9 关于可比性的更多信息
  89. 8.10 被省略的事物
  90. 8.11 习惯性的Go语言和泛型
  91. 8.12 向标准库添加泛型
  92. 8.13 解锁未来特性
  93. 8.14 练习
  94. 8.15 总结
  95. 第9章 错误处理
  96. 9.1 如何处理错误:基础知识
  97. 9.2 使用字符串创建简单错误
  98. 9.3 哨兵错误
  99. 9.4 错误也是值
  100. 9.5 包装错误
  101. 9.6 包装多个错误
  102. 9.7 Is和As
  103. 9.8 使用defer包装错误
  104. 9.9 panic与recover
  105. 9.10 从错误中获取栈跟踪
  106. 9.11 练习
  107. 9.12 总结
  108. 第10章 模块、包和导入
  109. 10.1 仓库、模块和包
  110. 10.2 使用go.mod
  111. 10.3 创建包
  112. 10.4 使用模块
  113. 10.5 发布模块
  114. 10.6 对模块进行版本控制
  115. 10.7 模块代理服务器
  116. 10.8 附加细节
  117. 10.9 练习
  118. 10.10 总结
  119. 第11章 Go工具集
  120. 11.1 使用go run构建并执行
  121. 11.2 使用go install添加第三方工具
  122. 11.3 使用goimports改进导入格式
  123. 11.4 使用代码质量静态分析工具
  124. 11.5 使用govulncheck扫描存在漏洞的依赖项
  125. 11.6 嵌入内容到程序中
  126. 11.7 嵌入隐藏文件
  127. 11.8 使用go generate
  128. 11.9 使用go generate和Makefile
  129. 11.10 在Go二进制文件内读取构建信息
  130. 11.11 为其他平台构建Go二进制文件
  131. 11.12 使用构建标签
  132. 11.13 测试Go的版本
  133. 11.14 使用go help了解有关Go工具的更多信息
  134. 11.15 练习
  135. 11.16 总结
  136. 第12章 Go中的并发性
  137. 12.1 何时使用并发
  138. 12.2 协程
  139. 12.3 通道
  140. 12.4 select
  141. 12.5 并发实践和模式
  142. 12.6 何时使用互斥锁而不是通道
  143. 12.7 原子操作—你可能不需要这些
  144. 12.8 关于并发的更多学习资源
  145. 12.9 练习
  146. 12.10 总结
  147. 第13章 标准库
  148. 13.1 io家族
  149. 13.2 时间
  150. 13.3 encoding/json
  151. 13.4 net/http
  152. 13.5 结构化日志
  153. 13.6 练习
  154. 13.7 总结
  155. 第14章 context
  156. 14.1 什么是context
  157. 14.2 值
  158. 14.3 取消
  159. 14.4 带有截止时间的context
  160. 14.5 在代码中取消context
  161. 14.6 练习
  162. 14.7 总结
  163. 第15章 编写测试
  164. 15.1 测试的基本知识
  165. 15.2 表格驱动测试
  166. 15.3 并发运行测试
  167. 15.4 检查代码覆盖率
  168. 15.5 模糊测试
  169. 15.6 使用基准测试
  170. 15.7 Go中的测试桩
  171. 15.8 httptest
  172. 15.9 集成测试和构建标签
  173. 15.10 使用数据竞争检测器检查并发问题
  174. 15.11 练习
  175. 15.12 总结
  176. 第16章 恶龙禁区:反射、unsafe和cgo
  177. 16.1 反射:运行时类型处理
  178. 16.2 unsafe意味着不安全
  179. 16.3 cgo用于集成而非性能优化
  180. 16.4 练习
  181. 16.5 总结
书名:Go语言学习指南:惯例模式与编程实践(第2版)
作者:Jon Bodner
译者:邵帅, 于鑫蕾, 任照松 等译
国内出版社:机械工业出版社
出版时间:2025年10月
页数:396
书号:978-7-111-79145-4
原版书书名:Learning Go, 2nd Edition
原版书出版商:O'Reilly Media
Jon Bodner
 
Jon Bodner拥有20多年的软件工程师、首席开发者和架构师工作经验。他从事过多个领域的软件开发工作,包括教育、金融、商业、医疗保健、法律、政府和互联网基础设施。
Jon是美国第一资本金融公司(Capital One)的杰出工程师,他为公司的开发和测试工作流做出了巨大贡献,开发了Web支付页面的检测与输入的专利技术,并合作开发了用于发现和管理软件开发问题的工具。
Jon 经常在Go会议上发表演讲,他关于Go和软件工程的博客文章已经有超过30万次的浏览量。他是Proteus数据访问库(https://github.com/jonbodner/proteus)的创建者,也是checks-out(LGTM项目的分支) (https://github.com/capitalone/checks-out)的联合开发者。
 
 
本书封面上的动物是平原囊鼠(Geomys bursarius),这是一种生活在北美大平原上的穴居哺乳动物。这些啮齿类动物非常善于挖掘,主要生活在地下。
平原囊鼠全身(除了尾巴之外)都覆盖着棕色的皮毛。为了适应挖掘需要,它们有着小眼睛、短耳朵和大的爪状前脚。它们还能耐受低氧和高浓度二氧化碳的环境。平原囊鼠因其外部的颊囊而得名,颊囊可用于携带食物。
平原囊鼠具有很强的领地意识和攻击性,很少进入其他同类的洞穴。它们有将近四分之三的时间都待在自己的洞穴里,洞穴中有它们的巢穴,还有装着树根和草的食物储藏室。它们会到地面上寻找食物和配偶。
平原囊鼠的保护状态是无危。
购买选项
定价:149.00元
书号:978-7-111-79145-4
出版社:机械工业出版社