《Go语言学习指南:惯例模式与编程实践》是由机械工业出版社出版的一本关于Go语言方面的书籍,作者是乔恩·博德纳(Jon、Bodner),主要介绍了关于Go语言、Go语言学习指南、惯例模式、编程实践方面的知识内容,目前在Go语言类书籍综合评分为:9.7分。
书籍介绍
编辑推荐
Go语言正迅速成为构建Web服务的优选语言。尽管市面上有大量的教程向具有其他编程语言经验的开发者讲授Go语法,但要熟练掌握Go语言,这些教程远远不够,它们并没有介绍Go语言的惯例模式与编程实践。本书将指导读者学习编写清晰且符合Go语言惯例的代码所需的关键知识。
无论你的开发经验和水平如何,都将通过本书学会Go开发者的思考模式。作者Jon Bodner精心介绍了经验丰富的Go开发者所采用的设计模式,并说明了使用这些模式的理由。你还将提前了解Go即将发布的泛型特性,以及它是如何从设计到实现,一步步融入Go语言的。
通过本书,你将:
学习如何在Go语言中编写惯例代码并设计Go项目。
理解Go语言设计中的权衡。
学会为独立开发人员或团队构建Go语言的开发环境。
了解如何以及何时使用反射、unsafe和cgo。
探究如何利用Go语言的特性使代码高效运行。
了解哪些Go语言的特性应该少使用,或避免使用。
内容简介
Go语言正在迅速成为构建Web服务的优选语言。本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。本书语言生动,表述清晰,将Go语言的基本原理与语言哲学联系在一起,引导读者正确编写Go语言。既介绍基础知识,又涵盖高级主题(如反射和C语言互操作),通过大量例子演示了如何写出符合Go语言惯例的代码,解释了可能影响程序行为的底层概念,比如指针对内存布局和垃圾回收的影响。无论你是Go语言的初学者,还是经验丰富的Go语言从业人员,相信都能从本书中获益良多。
目录
- 第1章 设置Go语言的开发环境7
- 1.1 安装Go工具7
- 1.2 Go的工作空间8
- 1.3 Go命令集9
- 1.4 分析与审查13
- 1.5 选择开发工具15
- 1.6 Makefile18
- 1.7 保持更新19
- 1.8 总结20
- 第2章 基础类型和变量声明21
- 2.1 内置类型21
- 2.2 var与:= 30
- 2.3 const关键字32
- 2.4 有类型的常量与无类型的常量33
- 2.5 未使用的变量34
- 2.6 常量与变量的命名35
- 2.7 总结37
- 第3章 复合类型38
- 3.1 数组38
- 3.2 切片40
- 3.3 字符串、字符和字节49
- 3.4 映射52
- 3.5 结构体57
- 3.6 总结61
- 第4章 代码块、影子变量和流程控制62
- 4.1 代码块62
- 4.2 if语句66
- 4.3 for语句67
- 4.4 switch语句78
- 4.5 默认的switch语句81
- 4.6 if和switch之间的选择82
- 4.7 goto语句83
- 4.8 总结85
- 第5章 函数86
- 5.1 函数的声明和调用86
- 5.2 函数即值92
- 5.3 闭包95
- 5.4 defer98
- 5.5 函数的值调用101
- 5.6 总结103
- 第6章 指针104
- 6.1 指针快速入门104
- 6.2 不畏惧指针107
- 6.3 指针即可变的参数109
- 6.4 指针作为第二选择113
- 6.5 指针传递可提高性能114
- 6.6 零值与无值114
- 6.7 映射与切片的区别115
- 6.8 切片用作缓冲区118
- 6.9 优化垃圾回收119
- 6.10 总结121
- 第7章 类型、方法与接口122
- 7.1 Go语言的类型122
- 7.2 方法123
- 7.3 使用内嵌进行组合131
- 7.4 内嵌不是继承132
- 7.5 接口概览133
- 7.6 接口是类型安全的鸭子类型134
- 7.7 内嵌与接口137
- 7.8 接收接口,返回结构体138
- 7.9 接口与nil139
- 7.10 空接口139
- 7.11 类型断言与type-switch141
- 7.12 谨慎使用类型断言与type-switch143
- 7.13 函数类型实现接口145
- 7.14 隐式接口实现依赖注入146
- 7.15 Wire150
- 7.16 Go并非传统意义上的面向对象语言150
- 7.17 总结150
- 第8章 错误151
- 8.1 如何处理错误151
- 8.2 使用字符串创建简单错误152
- 8.3 哨兵错误153
- 8.4 错误是值155
- 8.5 包装错误157
- 8.6 Is和As159
- 8.7 使用defer包装错误162
- 8.8 panic和recover163
- 8.9 从错误中获取堆栈跟踪信息165
- 8.10 总结165
- 第9章 模块、包和导入166
- 9.1 仓库、模块和包166
- 9.2 go.mod166
- 9.3 创建包167
- 9.4 模块177
- 9.5 模块的发布185
- 9.6模块的版本控制186
- 9.7 模块代理服务器187
- 9.8 总结188
- 第10章 Go的并发编程189
- 10.1 何时使用并发编程189
- 10.2 goroutine190
- 10.3 通道192
- 10.4 select语句194
- 10.5 并发实践与模式197
- 10.6 何时使用互斥锁211
- 10.7 atomic214
- 10.8 额外资源214
- 10.9 总结214
- 第11章 Go语言标准库215
- 11.1 标准io库215
- 11.2 time220
- 11.3 encoding/json222
- 11.4 net/http228
- 11.5 总结234
- 第12章 上下文235
- 12.1 什么是上下文235
- 12.2 取消238
- 12.3 计时器241
- 12.4 在上下文中处理取消请求243
- 12.5 传递值244
- 12.6 总结249
- 第13章 测试250
- 13.1 测试的基本知识250
- 13.2 表格驱动测试256
- 13.3 检查代码覆盖率258
- 13.4 基准测试261
- 13.5 Go中的测试桩264
- 13.6 httptest269
- 13.7 集成测试和编译标签271
- 13.8 使用竞争检测器检查并发问题272
- 13.9总结274
- 第14章 恶龙禁区:反射、unsafe和cgo275
- 14.1 在运行时使用反射处理类型275
- 14.2 unsafe意味着不安全289
- 14.3 cgo用于集成,而不是为了性能294
- 14.4 总结297
- 第15章 展望未来:Go中的泛型298
- 15.1 泛型减少冗余代码,提高类型安全性298
- 15.2 Go中的泛型300
- 15.3 类型列表可指定操作符305
- 15.4 泛型函数抽象算法306
- 15.5 类型列表限制常量和实现307
- 15.6 暂不考虑的问题310
- 15.7 惯例模式与泛型312
- 15.8 未来更多可能312
- 15.9 总结313