新書推薦:
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:NT$
500.0
《
安全感是内心长出的盔甲
》
售價:NT$
305.0
《
快人一步:系统性能提高之道
》
售價:NT$
505.0
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:NT$
352.0
《
算法图解(第2版)
》
售價:NT$
356.0
《
科学的奇幻之旅
》
售價:NT$
352.0
《
画艺循谱:晚明的画谱与消闲
》
售價:NT$
653.0
《
新民说·现实政治史:从马基雅维利到基辛格
》
售價:NT$
454.0
|
編輯推薦: |
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语言从业人员,相信都能从本书中获益良多。
|
關於作者: |
Jon Bodner是Capital One公司的一名杰出工程师,拥有20多年的软件工程师、首席开发者和架构师工作经验。他从事过多个领域的软件开发工作,包括教育、金融、商业、医疗保健、法律、政府和互联网基础设施。
|
目錄:
|
第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
|
內容試閱:
|
Go有小部分功能集与大多数其他现代编程语言格格不入。编写良好的Go程序往往简单明了,有时还有些重复。Go语言没有继承,没有泛型(目前还没有),没有面向切面的编程(aspect-oriented programming),没有函数重载,没有操作符重载,没有模式匹配,没有命名参数,没有异常。让很多人望而生畏的是,Go竟然有指针。Go的并发模型也与其他语言不同,但它基于20世纪70年代的思想,其垃圾收集器使用的算法也是如此。简言之,Go有些复古,而这正是关键所在。
不过,无趣并不意味着平庸。要想正确使用Go,就需要了解它的功能是如何整合在一起的。即使你能够写出看起来像Java或Python的Go代码,也并不会满足于得到的结果,并且想弄清楚所有这些特性背后的底层机制是怎么回事。这正是本书的意义所在。本书清楚地介绍了Go的特性,解释了如何才能限度地使用它们来编写可长期维护且符合Go语言惯例的代码。
在需要构建某种可持续发展的事物时,无趣是件好事。如果一座桥是用一项未经测试的技术建造而成的,即使工程师认为这项技术超级酷,也绝没有人愿意成为个开车通过的人。许多编程语言在添加特性时并没有考虑它们对代码库可维护性的影响。Go的目标正是让开发者能够更容易、更高效地在几十年的软件生命周期中持续构建规模化的软件。
Go语言确实很无趣,但是也很奇妙。希望本书能够教会你如何用无趣的代码构建令人振奋的项目。
【目标读者】
本书的目标读者是想要学习Go语言的开发者,尤其是Go语言的初学者。本书的重点不是简单地用Go写程序,而是写出符合Go语言惯例的程序。有经验的Go开发者可以在书中找到关于如何有效地使用该语言的新特性的建议。重要的是,读者希望能够学到如何写出像Go一样的Go代码。
读者需要有开发者行业工具的使用经验,比如版本控制(好是Git)和IDE。读者还应该熟悉基本的计算机科学概念,如并发编程和抽象,因为书中解释了它们如何在Go中工作。其中一些代码示例可以从GitHub上下载,还有几十个示例可以在The Go Playground上在线试用。虽然互联网连接不是必需的,但它在回顾可执行示例时很有帮助。由于Go经常被用来构建和调用HTTP服务端,所以有些示例需要读者熟悉基本的HTTP概念。
虽然Go的大部分特性在其他语言中都能找到,但Go做出了不同的权衡,所以用它编写的程序具有不同的结构。学习Go首先要从设置Go开发环境开始,然后涵盖变量、类型、流程控制和功能。请不要跳过这些细节,正是这些细节让你的代码符合Go的惯例。
【示例代码】
可以从https://github.com/learning-go-book下载补充材料(示例代码、练习、勘误等)。
|
|