第1章 认识Go语言 1

1.1 Go语言简介 1

1.2 Go语言的优势与特性 2

1.3 在Windows下安装Go 3

1.4 在Linux下安装Go 6

1.5 在macOS下安装Go 8

1.6 安装GoLand 9

1.7 搭建GoLand环境 10

1.8 第一个Go程序“Hello World” 11

1.9 动手练习:编程实现人机交互 12

1.10 小结 14

第2章 基础语法 15

2.1 关键字与标识符 15

2.1.1 关键字 15

2.1.2 标识符命名规范 17

2.1.3 空白标识符 18

2.1.4 预声明标识符 19

2.1.5 导出标识符 21

2.1.6 唯一标识符 22

2.2 变量与常量 22

2.2.1 变量定义与赋值 22

2.2.2 常量与iota 24

2.3 运算符的使用 26

2.3.1 算术运算符 26

2.3.2 关系运算符 27

2.3.3 赋值运算符 28

2.3.4 逻辑运算符 30


2.3.5 位运算符 31

2.3.6 其他运算符 33

2.3.7 运算符优先级 33

2.4 代码注释 34

2.5 动手练习:编程实现个人健康评测 35

2.6 小结 36

第3章 数据类型 38

3.1 整型的取值范围 38

3.2 浮点类型与精度丢失 40

3.3 复数的计算 42

3.4 布尔型的应用 43

3.5 ASCII与Unicode编码 44

3.6 字符类型 45

3.7 字符串操作 45

3.7.1 字符串与转义符 46

3.7.2 字符串格式化 47

3.7.3 字符串拼接 49

3.7.4 获取字符串长度 50

3.7.5 遍历字符串 51

3.7.6 字符位置与截取 52

3.7.7 字符串分割 53

3.7.8 字符串替换 54

3.8 转换数据类型 55

3.8.1 整型与浮点型 55

3.8.2 整型与字符串 56

3.8.3 浮点型与字符串 57

3.9 动手练习:编程实现在线客服热线 59

3.10 小结 61

第4章 流程控制 62

4.1 if的条件判断 62

4.2 if的多层嵌套 64

4.3 switch的多条件分支 65

4.4 for的循环遍历 69

4.5 for-range获取键值 70

4.6 break越级终止循环 71

4.7 continue跳过本次循环 72

4.8 goto跳到指定代码 73

4.9 动手练习:编程实现简易计算器 74

4.10 小结 77

第5章 指针 78

5.1 指针的概念 78

5.2 指针定义与空指针 79

5.3 指针赋值与取值 81

5.4 切片指针 83

5.5 指针的指针 86

5.6 动手练习:编程实现彩票36选7 87

5.7 小结 90

第6章 内置容器 91

6.1 数组 91

6.1.1 数组定义与操作 91

6.1.2 数组初始化定义 92

6.1.3 多维数组 93

6.2 切片 95

6.2.1 切片定义与操作 95

6.2.2 新增切片元素 97

6.2.3 截取切片元素 98

6.2.4 复制切片 100

6.2.5 切片长度与容量 101

6.3 集合 102

6.3.1 集合定义与操作 102

6.3.2 删除集合元素 104


6.4 动手练习:编程实现集合与

JSON互换 104

6.5 列表 107

6.5.1 列表定义 107

6.5.2 列表元素操作 108

6.5.3 遍历列表元素 110

6.6 动手练习:编程实现产品抽样

检测 112

6.7 小结 114

第7章 函数 116

7.1 函数定义与调用 116

7.2 不固定参数数量 119

7.3 函数以变量表示 120

7.4 没有名字的函数 121

7.5 引用外部变量的函数 122

7.6 函数自身调用 123

7.7 动手练习:编程实现创建文件

后缀名 124

7.8 小结 126

第8章 结构体 127

8.1 Go的“面向对象” 127

8.2 结构体定义与实例化 128

8.3 指针方式的实例化 130

8.4 结构体标签 131

8.5 匿名结构体与匿名成员 133

8.6 结构体嵌套 134

8.7 自定义构造函数 136

8.8 结构体方法:指针与值接收者 138

8.9 动手练习:编程实现结构体与

JSON互换 140

8.10 动手练习:编程实现多键索引

查询数据 142

8.11 小结 145


第9章 接口 147

9.1 接口定义与使用 147

9.2 鸭子类型 150

9.3 多态与工厂函数 152

9.4 接口的自由组合 153

9.5 任意数据类型的空接口 156

9.6 接口的类型断言 158

9.7 动手练手:编程实现营救村民

游戏 161

9.8 小结 166

第10章 反射 168

10.1 什么是反射 168

10.2 第一定律:接口变量转反射

变量 169

10.3 第二定律:反射变量转接口

变量 170

10.4 第三定律:修改反射变量的值 171

10.5 反射的类型与种类 173

10.6 切片与反射 175

10.7 集合与反射 177

10.8 结构体与反射 180

10.9 指针与反射 187

10.10 函数与反射 190

10.11 动手练习:编程实现对象序列化

处理 192

10.12 小结 193

第11章 并发编程 194

11.1 异步的概念 194

11.2 Goroutine 195

11.3 函数创建Goroutine 197

11.4 匿名函数创建Goroutine 199

11.5 通道 200

11.6 无缓冲通道 202

11.7 带缓冲通道 204

11.8 关闭通道读取数据 205

11.9 Select处理多通道 207

11.10 sync同步等待 208

11.11 sync加锁机制 210

11.12 sync.Map的应用 214

11.13 动手练习:编程模拟餐馆经营

场景 219

11.14 小结 221

第12章 语法特性 223

12.1 panic触发宕机 223

12.2 defer延时执行 224

12.3 recover宕机时恢复执行 225

12.4 值类型、引用类型与深浅拷贝 226

12.5 类型别名与自定义 229

12.6 new和make的区别 231

12.7 泛型的概念与应用 234

12.8 动手练习:编程实现出租车费用

计算 236

12.9 小结 238

第13章 包的应用与管理 239

13.1 常用内置包 239

13.2 包命名与导入 240

13.3 包的重命名 242

13.4 无包名调用 242

13.5 初始化函数init()与空导入 243

13.6 包的自定义与使用 245

13.7 包管理工具go mod 246

13.8 第三方包下载与使用 249

13.9 动手练习:编程实现排序算法 251

13.10 小结 255

第14章 目录与文件处理 257

14.1 使用os实现系统操作 257

14.2 使用path获取路径信息 262

14.3 使用os读写文件 267

14.4 使用io/ioutil读写文件 270

14.5 使用bufio读写文件 272

14.6 使用encoding/csv读写CSV文件 275

14.7 使用encoding/json读写

JSON文件 278

14.8 第三方包读写Excel文件 280

14.9 动手练习:编程实现学生管理

系统 283

14.10 小结 286

第15章 时间处理 287

15.1 时间戳 287

15.2 结构体Time 289

15.3 字符串格式化 290

15.4 时间类型的相互转换 292

15.5 时间计算操作 293

15.6 延时、超时与定时 297

15.7 动手练习:编程实现个人

备忘录 300

15.8 小结 302

第16章 数据库编程 304

16.1 搭建SQLite运行环境 304

16.2 安装与使用MySQL 306

16.3 安装与使用MongoDB 309

16.4 安装与使用Redis 312

16.5 go-sqlite3读写SQLite 314

16.6 go-sql-driver/mysql读写MySQL 317

16.7 mongo-driver读写MongoDB 320

16.8 go-redis读写Redis 325

16.9 ORM框架:Gorm 330

16.10 动手练习:编程实现员工管理

系统 335

16.11 小结 337


第17章 Go项目——网页自动化测试

程序开发 339

17.1 了解自动化工具Selenium 339

17.2 安装Selenium 340

17.3 使用浏览器查找元素 342

17.4 浏览器配置与启动 345

17.5 网页元素定位 349

17.6 网页元素操作 353

17.7 浏览器常用操作 356

17.8 网页加载等待 358

17.9 iframe与标签页切换 360

17.10 Cookie读写 363

17.11 动手练习:编程实现爬取

BOSS直聘招聘数据 365

17.12 小结 370

第18章 Go项目——网络爬虫程序

开发 372

18.1 HTTP与HTTPS 372

18.2 请求头 374

18.3 使用浏览器分析网站 375

18.4 使用net/http发送请求 377

18.5 转码与HTML解析 379

18.6 选择数据存储方式 382

18.7 动手练习:编程实现爬取

电影TOP100榜单 383

18.8 小结 388

第19章 Go项目——网络编程应用 389

19.1 TCP和UDP的区别 389

19.2 创建TCP应用 390

19.3 创建UDP应用 393

19.4 创建HTTP服务应用 396

19.5 httprouter扩展路由 399


19.6 多种响应处理方式 401

19.7 HTML模板引擎 404

19.8 网站项目:信息反馈平台的开发 410

19.8.1 网站功能需求 410

19.8.2 项目架构设计 411

19.8.3 搭建开发环境 412

19.8.4 定义模型与路由 412

19.8.5 编写模板文件 415

19.8.6 网站运行与测试 417

19.9 小结 419

第20章 编译与运行 420

20.1 run与build的区别 420

20.2 单文件编译 421

20.3 同包多文件编译 422

20.4 不同包多文件编译 422

20.5 编译参数说明 423

20.6 小结 424