《Go语言项目开发上手指南》从实践出发讲解Go语言编程的基础和进阶知识。全书共分为14章,第1~4章讲述Go的基础知识,如基础语法、内置库的使用等,第5~14章介绍编写图表库、实现命令行工具、网络爬虫Web编程、GraphQL编程和面向接口编程等,将Go的核心知识和应用拆分到不同的应用场景中进行讲解。
本书适合对Go语言的应用已经有一定基础,并希望能够在Web开发方面、接口编程方面结合Go语言来实现进阶学习的技术人员学习和参考。
封面图
目录
- 前言
- 第1章 概述1
- 1.1 Go语言的特性1
- 1.2 开发环境的搭建2
- 1.2.1 下载与目标操作系统匹配的安装包2
- 1.2.2 设置环境变量2
- 1.2.3 集成开发环境的选择4
- 1.2.4 编写第一个Go程序4
- 1.3 Go命令行和项目结构5
- 1.3.1 需要GOPATH支持的方式5
- 1.3.2 不需要GOPATH支持的方式5
- 1.4 本章小结5
- 第2章 基础知识6
- 2.1 引子6
- 2.2 了解Go语言的基本语法7
- 2.2.1 变量7
- 2.2.2 声明与赋值7
- 2.2.3 多个变量的声明与赋值8
- 2.2.4 变量的作用域8
- 2.2.5 常量9
- 2.2.6 基本数据类型9
- 2.2.7 类型转换12
- 2.2.8 自定义类型12
- 2.2.9 函数13
- 2.2.10 流程控制15
- 2.2.11 结构体19
- 2.2.12 接口21
- 2.3 本章小结22
- 第3章 数据操作23
- 3.1 变量23
- 3.1.1 显式声明与隐式声明23
- 3.1.2 组织多个变量24
- 3.1.3 变量的命名应遵循的原则25
- 3.2 运算26
- 3.2.1 算术运算26
- 3.2.2 逻辑运算27
- 3.3 数组和切片28
- 3.4 字典29
- 3.5 结构体30
- 3.5.1 匿名字段31
- 3.5.2 小结32
- 3.6 接口33
- 3.6.1 error33
- 3.6.2 Marshaler34
- 3.7 库(包)管理36
- 3.7.1 库(包)的导入36
- 3.7.2 下载库(包)36
- 3.8 项目组织的结构37
- 3.8.1 领域驱动的方式37
- 3.8.2 业务驱动的方式38
- 3.9 本章小结38
- 第4章 内置库的常用操作39
- 4.1 字符串39
- 4.2 bytes45
- 4.3 json47
- 4.4 io/bufio48
- 4.5 fmt51
- 4.6 strconv55
- 4.7 time57
- 4.8 regexp59
- 4.9 log62
- 4.10 reflect/unsafe65
- 4.11 os/path/filepath69
- 4.12 unicode78
- 4.13 flag80
- 4.14 net/url84
- 4.15 net/http87
- 4.16 sort94
- 4.17 error97
- 4.18 本章小结99
- 第5章 编写图表库100
- 5.1 常见的开源图表库100
- 5.1.1 ECharts100
- 5.1.2 BizCharts103
- 5.1.3 chart.js105
- 5.1.4 HighCharts106
- 5.1.5 小结108
- 5.2 模板引擎的使用108
- 5.3 使用模板引擎构建图表111
- 5.4 基于chart.js构建图表库go-chart121
- 5.4.1 项目组织结构122
- 5.4.2 模板文件123
- 5.4.3 基础数据124
- 5.4.4 图表类型128
- 5.5 本章小结132
- 第6章 编写测试133
- 6.1 单元测试133
- 6.2 基本的使用134
- 6.2.1 常见用法134
- 6.2.2 样本测试135
- 6.2.3 SetUp/TearDown136
- 6.3 表格驱动法测试136
- 6.4 第三方库goconvey137
- 6.5 解决依赖性问题140
- 6.5.1 函数依赖关系140
- 6.5.2 数据库的依赖143
- 6.6 性能测试148
- 6.7 本章小结150
- 第7章 网络爬虫151
- 7.1 网络爬虫是什么151
- 7.2 网页的基本组成152
- 7.2.1 HTML153
- 7.2.2 Chrome开发者工具的使用155
- 7.2.3 小结162
- 7.3 原生库解析HTML网页163
- 7.4 正则表达式解析网页165
- 7.5 网络爬虫的流程167
- 7.6 网页源代码的获取168
- 7.6.1 原生net/http库168
- 7.6.2 Selenium浏览器自动化测试169
- 7.6.3 Chromedp渲染172
- 7.6.4 小结174
- 7.7 CSS选择器解析网页174
- 7.7.1 语法174
- 7.7.2 下载安装177
- 7.7.3 示例177
- 7.7.4 小结185
- 7.8 XPath路径表达式解析网页185
- 7.8.1 语法185
- 7.8.2 下载安装187
- 7.8.3 示例188
- 7.8.4 小结192
- 7.9 JSON数据解析192
- 7.9.1 JSON数据192
- 7.9.2 下载安装194
- 7.9.3 v2ex社区实例195
- 7.9.4 猫眼票房实例197
- 7.10 App端数据的获取201
- 7.10.1 Charles的使用201
- 7.10.2 Mitmproxy的使用203
- 7.10.3 小结205
- 7.11 数据存储206
- 7.11.1 百度搜索指数实例206
- 7.11.2 持久化存储211
- 7.11.3 数据库的形式214
- 7.12 本章小结218
- 第8章 实现命令行工具219
- 8.1 优秀的命令行工具的特点219
- 8.1.1 Docker219
- 8.1.2 Go221
- 8.2 命令行工具需要处理的内容223
- 8.3 Go实现命令行的几种方式223
- 8.3.1 内置的os库224
- 8.3.2 内置的flag库226
- 8.3.3 使用第三方库cobra实现gitcli233
- 8.4 本章小结250
- 第9章 动手实现一个库251
- 9.1 解决什么问题251
- 9.2 解决方案253
- 9.2.1 手动处理253
- 9.2.2 参考别人的思路254
- 9.2.3 自己的思路258
- 9.2.4 持续集成264
- 9.2.5 拓展273
- 9.3 本章小结273
- 第10章 Web服务275
- 10.1 使用net/http构建简易的Web服务275
- 10.1.1 启动Web服务275
- 10.1.2 目标281
- 10.1.3 模板的使用281
- 10.1.4 内容开发286
- 10.2 使用net/http构建爱鲜蜂Web服务317
- 10.2.1 需求流程梳理318
- 10.2.2 模型设计319
- 10.2.3 代码开发325
- 10.2.4 项目组织结构339
- 10.3 本章小结375
- 第11章 Web开发手册376
- 11.1 再谈HTTP376
- 11.2 设计RESTful API377
- 11.2.1 资源的访问操作378
- 11.2.2 路由的设计379
- 11.2.3 参数379
- 11.2.4 参数检验382
- 11.2.5 响应信息383
- 11.3 数据模型385
- 11.3.1 GORM方案387
- 11.3.2 XORM方案387
- 11.3.3 小结390
- 11.4 中间件391
- 11.4.1 Gin中间件394
- 11.4.2 Echo中间件395
- 11.4.3 Iris中间件396
- 11.4.4 小结396
- 11.5 响应信息396
- 11.5.1 正确时的响应信息397
- 11.5.2 错误时的响应信息399
- 11.5.3 小结399
- 11.6 项目组织结构400
- 11.7 代码管理和托管402
- 11.8 Make构建工具403
- 11.8.1 语法规范403
- 11.8.2 Go项目的命令405
- 11.9 容器化部署406
- 11.9.1 Docker容器的使用407
- 11.9.2 小结408
- 11.10 自动CI/CD408
- 11.11 本章小结413
- 第12章 面向接口编程414
- 12.1 开源414
- 12.2 搜索引擎的基本使用415
- 12.2.1 下载并安装416
- 12.2.2 docker-compose配置文件416
- 12.2.3 查看安装是否成功417
- 12.3 客户端go-elasticsearch的使用418
- 12.3.1 下载并安装418
- 12.3.2 基本的使用419
- 12.4 项目组织的形式420
- 12.5 面向接口编程421
- 12.6 自己实现,学为己用432
- 12.7 本章小结441
- 第13章 Go学习路径442
- 13.1 内置库442
- 13.1.1 访问官方文档442
- 13.1.2 文档的组织442
- 13.1.3 阅读内置库444
- 13.2 版本管理445
- 13.2.1 初始化445
- 13.2.2 下载446
- 13.2.3 移除不需要的模块446
- 13.3 测试驱动开发446
- 13.4 命令行447
- 13.5 Web开发447
- 13.6 SQL与ORM448
- 13.7 系统工程448
- 13.7.1 需求讨论448
- 13.7.2 迭代开发/测试448
- 13.7.3 代码版本管理449
- 13.7.4 持续集成(CI)449
- 13.7.5 持续部署(CD)450
- 13.7.6 多组件部署450
- 13.7.7 监控运维450