书籍详情
企业级Go项目开发实战
作者:孔令飞 著
出版社:机械工业出版社
出版时间:2023-01-01
ISBN:9787111716341
定价:¥129.00
购买这本书可以去
内容简介
这是一本手把手教读者如何零基础快速掌握企业级Go项目全流程开发的实战性著作。内容初稿源于极客时间上的专栏(有超过25000人付费学习),图书内容在专栏的基础上做了全面的更新和大量的补充。作者是腾讯云的技术专家,有多年的企业级Go项目开发经验。全书围绕一个可部署、可运行的企业级Go应用(附源码,可二次开发)展开,覆盖项目全生命周期的所有环节,不仅将每个环节涉及的原理、步骤讲解得非常详细,而且把项目涉及的Go语言知识点全部娓娓道来。每个知识点都朝着*佳实践方向去设计,采用了业界共识程度*高的Go包、Go设计模式、Go开发规范、Go简洁架构等,不仅能让读者事半功倍地掌握企业级Go项目的开发方法,而且能学到一线大厂的实践经验。本书内容翔实,篇幅较大,一共31章,分为六个部分:第一部分是项目开始前的准备工作,包括贯穿全书的实战项目IAM的介绍与部署,以及Go开发环境的搭建;第二至六部分详细讲解了项目的设计、管理、开发、测试、部署等。包含了规范设计、文档编写、开发流程管理、功能设计与实现、项目测试、性能优化、高可用、高安全、水平扩展等方方面面。旨在帮助读者彻底学会如何构建企业级 Go 项目,并解决 Go 项目开发所面临的各类问题。
作者简介
孔令飞腾讯云容器技术专家,曾就职于联想和Red Hat,拥有多年Go项目开发和管理经验。云计算技术专家,在云计算领域有非常丰富的实践经验。Kubernetes社区贡献者,对Kubernetes、Docker、Serverless、微服务等技术有深入的理解。腾讯学院特约讲师,极客时间《Go 语言项目开发实战》专栏作者,掘金《基于 Go 语言构建企业级的 RESTful API 服务》专栏作者。
目录
第一部分 项目准备
第1章 Go开发环境准备2
1.1 机器选择2
1.1.1 开发机选择3
1.1.2 办公机选择3
1.2 Windows终端模拟器安装和配置3
1.3 Linux服务器申请和配置4
1.3.1 Linux服务器申请4
1.3.2 登录Linux服务器5
1.3.3 Linux服务器配置6
1.3.4 依赖安装和配置8
1.4 Go编译环境安装和配置9
1.4.1 Go编译工具安装和配置10
1.4.2 Protobuf编译环境安装11
1.5 Go IDE安装和配置12
1.6 本章总结14
第2章 快速部署IAM系统15
2.1 为什么选择IAM系统作为实战项目15
2.2 IAM系统概述16
2.2.1 IAM资源授权流程16
2.2.2 IAM系统架构介绍17
2.2.3 通过使用流程理解架构18
2.3 下载IAM项目代码20
2.4 安装和配置数据库21
2.4.1 配置scripts/install/environment.sh21
2.4.2 安装和配置MariaDB21
2.4.3 安装和配置Redis22
2.4.4 安装和配置MongoDB22
2.5 安装和配置IAM系统24
2.5.1 准备工作25
2.5.2 安装和配置iam-apiserver28
2.5.3 安装iamctl32
2.5.4 安装和配置iam-authz-server34
2.5.5 安装和配置iam-pump36
2.5.6 安装和配置 iam-watcher38
2.5.7 安装 man 文件39
2.5.8 测试IAM系统是否安装成功40
2.6 彩蛋:一键安装40
2.7 本章总结41
第二部分 项目设计
第3章 规范设计44
3.1 有哪些地方需要制定规范44
3.2 开源规范45
3.2.1 开源协议概述45
3.2.2 开源协议选择46
3.2.3 开源规范有什么47
3.2.4 开源规范详细内容47
3.2.5 运营开源项目48
3.3 文档规范49
3.3.1 README 文档规范49
3.3.2 项目文档规范50
3.3.3 API文档规范51
3.4 Commit Message规范53
3.4.1 Commit Message规范有哪些53
3.4.2 与Commit Message相关的3个
重要内容59
3.4.3 Commit Message规范自动化66
3.5 版本规范67
3.5.1 什么是语义化版本规范67
3.5.2 语义化版本规范示例69
3.5.3 如何确定版本号69
3.6 本章总结69
第4章 目录结构设计71
4.1 如何规范目录71
4.2 平铺式目录结构72
4.3 结构化目录结构73
4.3.1 Go应用:主要存放前后端代码75
4.3.2 Go应用:主要存放测试相关的
文件和代码78
4.3.3 Go应用:存放与应用部署相关
的文件78
4.3.4 项目管理:存放管理Go项目的
各类文件79
4.3.5 文档:主要存放项目的各类文档80
4.3.6 不建议的目录82
4.4 一些建议82
4.5 本章总结83
第5章 工作流设计84
5.1 集中式工作流84
5.2 功能分支工作流85
5.3 Git Flow工作流88
5.3.1 Git Flow的5种分支88
5.3.2 Git Flow开发流程88
5.4 Forking工作流91
5.5 本章总结93
第6章 研发流程设计95
6.1 如何设计Go项目的研发流程95
6.2 在设计研发流程时,需要关注
哪些点96
6.3 业界相对标准的研发流程96
6.3.1 需求阶段96
6.3.2 设计阶段98
6.3.3 开发阶段98
6.3.4 测试阶段100
6.3.5 发布阶段100
6.3.6 运营阶段102
6.4 角色与分工102
6.5 如何管理应用的生命周期104
6.6 应用生命周期管理技术有哪些104
6.7 研发模式105
6.8 CI/CD:自动化构建和部署应用106
6.8.1 持续集成107
6.8.2 持续交付107
6.8.3 持续部署107
6.9 DevOps:研发运维一体化108
6.9.1 AIOps:智能运维108
6.9.2 ChatOps:聊着天就把事情
给办了109
6.9.3 GitOps:一种实现云原生的
持续交付模型109
6.9.4 NoOps:无运维110
6.10 如何选择合适的应用生命周期
管理技术111
6.11 本章总结111
第7章 如何写出优雅的Go项目112
7.1 优雅Go项目实现思路112
7.2 编写高质量的Go应用113
7.2.1 代码结构114
7.2.2 代码规范115
7.2.3 代码质量116
7.2.4 编程哲学119
7.2.5 软件设计方法124
7.3 高效管理项目125
7.3.1 高效的开发流程125
7.3.2 使用Makefile管理项目126
7.3.3 自动生成代码126
7.3.4 善于借助工具127
7.3.5 对接CI/CD127
7.4 编写高质量的项目文档128
7.5 本章总结128
第8章 Go语言设计模式?130
8.1 创建型模式131
8.1.1 单例模式131
8.1.2 工厂模式133
8.2 行为型模式136
8.2.1 策略模式136
8.2.2 模板模式138
8.3 结构型模式139
8.3.1 代理模式139
8.3.2 选项模式140
8.4 本章总结144
第三部分 项目管理
第9章 如何编写Makefile148
9.1 规划Makefile要实现的功能149
9.2 设计合理的Makefile结构151
9.3 掌握Makefile编写技巧153
9.3.1 善用通配符和自动变量153
9.3.2 善用函数153
9.3.3 依赖需要用到的工具154
9.3.4 把常用功能放在/Makefile中,
不常用的放在分类Makefile中154
9.3.5 编写可扩展的Makefile155
9.3.6 将所有输出存放在一个目录下,
方便清理和查找156
9.3.7 使用带层级的命名方式156
9.3.8 做好目标拆分157
9.3.9 设置OPTIONS157
9.3.10 定义环境变量158
9.3.11 自己调用自己159
9.4 本章总结159
第10章 IAM项目研发流程实战160
10.1 开发阶段160
10.1.1 代码开发160
10.1.2 代码提交165
10.2 测试阶段167
10.3 IAM项目的Makefile项目管理
技巧168
10.3.1 Makefile help命令自动解析169
10.3.2 在options中指定变量值169
10.3.3 自动生成CHANGELOG169
10.3.4 自动生成版本号169
10.3.5 保持行为一致170
10.4 本章总结171
第11章 静态代码检查172
11.1 为什么选择golangci-lint做静态
代码检查172
11.2 golangci-lint命令173
11.3 golangci-lint配置175
11.4 如何使用golangci-lint进行静态
代码检查178
11.5 golangci-lint使用技巧180
11.6 本章总结182
第12章 生成Swagger API文档183
12.1 Swagger介绍183
12.2 Swagger和OpenAPI的区别184
12.3 用go-swagger来生成Swagger API
文档184
12.3.1 安装swagger工具185
12.3.2 swagger命令行工具介绍185
12.4 如何使用swagger命令生成
Swagger文档186
12.4.1 解析注释生成Swagger文档186
12.4.2 go-swagger其他常用功能介绍192
12.5 IAM Swagger文档194
12.6 本章总结195
第四部分 项目开发
第13章 错误处理198
13.1 错误码设计198
13.1.1 期望错误码实现的功能199
13.1.2 常见的错误码实现方式199
13.1.3 错误码设计建议201
13.1.4 业务Code码设计201
13.1.5 如何设置HTTP状态码202
13.2 IAM项目错误码设计规范203
13.2.1 错误码设计规范203
13.2.2 错误信息规范说明204
13.2.3 IAM API返回值说明204
13.3 错误包204
13.3.1 错误包需要具有哪些功能204
13.3.2 错误包的实现208
13.3.3 如何记录错误212
13.4 一个错误码的具体实现215
13.5 错误码实际使用示例218
13.6 本章总结219
第14章 日志处理220
14.1 如何设计日志包220
14.1.1 基础功能220
14.1.2 高级功能222
14.1.3 可选功能224
14.1.4 设计时需要关注的点226
14.2 如何记录日志226
14.2.1 在何处打印日志227
14.2.2 在哪个日志级别打印日志228
14.2.3 如何记录日志内容229
14.2.4 记录日志的佳实践总结230
14.3 拓展内容:分布式日志解决方案
(EFK/ELK)230
14.4 有哪些优秀的开源日志包231
14.4.1 标准库log包232
14.4.2 glog232
14.4.3 logrus232
14.4.4 zap233
14.4.5 开源日志包选择233
14.5 从零开始编写一个日志包234
14.5.1 定义日志级别和日志选项234
14.5.2 创建Logger及各级别日志
打印方法236
14.5.3 将日志记录到支持的输出中237
14.5.4 自定义日志输出格式239
14.5.5 测试日志包239
14.6 IAM项目日志包设计实战240
14.7 本章总结244
第15章 GORM ORM应用245
15.1 GORM基础知识245
15.2 通过示例学习GORM246
15.2.1 自动迁移表结构248
15.2.2 插入表记录248
15.2.3 获取符合条件的记录248
15.2.4 更新表记录248
15.2.5 删除表记录249
15.2.6 获取表记录列表249
15.3 GORM常用操作讲解249
15.3.1 模型定义250
15.3.2 连接数据库251
15.3.3 创建记录251
15.3.4 删除记录252
15.3.5 更新记录253
15.3.6 查询数据253
15.3.7 高级查询254
15.3.8 原生SQL255
15.3.9 GORM钩子255
15.4 iam-apiserver中的CURD操作256
15.5 本章总结260
第16章 Web服务功能实现261
16.1 Web服务的核心功能261
16.1.1 基础功能262
16.1.2 高级功能262
16.2 Web框架为什么选择Gin263
16.3 Gin是如何支持Web服务的基础
功能的264
16.3.1 HTTP/HTTPS支持268
16.3.2 JSON数据格式支持269
16.3.3 路由匹配270
16.3.4 路由分组270
16.3.5 一进程多服务271
16.3.6 参数解析、参数校验、逻辑
处理、返回结果272
16.4 Gin是如何支持Web服务的高级
功能的274
16.4.1 中间件274
16.4.2 认证、RequestID、跨域277
16.4.3 优雅关停277
16.5 本章总结279
第17章 IAM应用构建280
17.1 如何构建应用框架280
17.2 应用构建三剑客281
17.2.1 命令行参数解析工具:Pflag281
17.2.2 配置解析神器:Viper285
17.2.3 现代化的命令行框架:Cobra291
17.3 构建应用的基础:应用的三大
基本功能297
17.4 iam-apiserver是如何构建应用
框架的298
17.5 App包的设计和实现300
17.5.1 构建应用301
17.5.2 命令行程序构建301
17.5.3 命令行参数解析302
17.5.4 配置文件解析305
17.6 IAM应用构建的优秀特性306
17.7 构建应用的注意事项307
17.8 本章总结307
第18章 IAM认证功能实现309
18.1 认证与授权的区别309
18.2 4种基本的认证方式310
18.2.1 基础认证310
18.2.2 摘要认证311
18.2.3 开放授权认证312
18.2.4 令牌认证314
18.3 基于JWT的Token认证机制实现314
18.3.1 JWT简介314
18.3.2 JWT认证流程315
18.3.3 JWT格式315
18.4 如何设计IAM项目的认证功能318
18.5 IAM项目是如何实现Basic
认证的320
18.6 IAM项目是如何实现Bearer
认证的326
18.6.1 iam-authz-server Bearer认证
第1章 Go开发环境准备2
1.1 机器选择2
1.1.1 开发机选择3
1.1.2 办公机选择3
1.2 Windows终端模拟器安装和配置3
1.3 Linux服务器申请和配置4
1.3.1 Linux服务器申请4
1.3.2 登录Linux服务器5
1.3.3 Linux服务器配置6
1.3.4 依赖安装和配置8
1.4 Go编译环境安装和配置9
1.4.1 Go编译工具安装和配置10
1.4.2 Protobuf编译环境安装11
1.5 Go IDE安装和配置12
1.6 本章总结14
第2章 快速部署IAM系统15
2.1 为什么选择IAM系统作为实战项目15
2.2 IAM系统概述16
2.2.1 IAM资源授权流程16
2.2.2 IAM系统架构介绍17
2.2.3 通过使用流程理解架构18
2.3 下载IAM项目代码20
2.4 安装和配置数据库21
2.4.1 配置scripts/install/environment.sh21
2.4.2 安装和配置MariaDB21
2.4.3 安装和配置Redis22
2.4.4 安装和配置MongoDB22
2.5 安装和配置IAM系统24
2.5.1 准备工作25
2.5.2 安装和配置iam-apiserver28
2.5.3 安装iamctl32
2.5.4 安装和配置iam-authz-server34
2.5.5 安装和配置iam-pump36
2.5.6 安装和配置 iam-watcher38
2.5.7 安装 man 文件39
2.5.8 测试IAM系统是否安装成功40
2.6 彩蛋:一键安装40
2.7 本章总结41
第二部分 项目设计
第3章 规范设计44
3.1 有哪些地方需要制定规范44
3.2 开源规范45
3.2.1 开源协议概述45
3.2.2 开源协议选择46
3.2.3 开源规范有什么47
3.2.4 开源规范详细内容47
3.2.5 运营开源项目48
3.3 文档规范49
3.3.1 README 文档规范49
3.3.2 项目文档规范50
3.3.3 API文档规范51
3.4 Commit Message规范53
3.4.1 Commit Message规范有哪些53
3.4.2 与Commit Message相关的3个
重要内容59
3.4.3 Commit Message规范自动化66
3.5 版本规范67
3.5.1 什么是语义化版本规范67
3.5.2 语义化版本规范示例69
3.5.3 如何确定版本号69
3.6 本章总结69
第4章 目录结构设计71
4.1 如何规范目录71
4.2 平铺式目录结构72
4.3 结构化目录结构73
4.3.1 Go应用:主要存放前后端代码75
4.3.2 Go应用:主要存放测试相关的
文件和代码78
4.3.3 Go应用:存放与应用部署相关
的文件78
4.3.4 项目管理:存放管理Go项目的
各类文件79
4.3.5 文档:主要存放项目的各类文档80
4.3.6 不建议的目录82
4.4 一些建议82
4.5 本章总结83
第5章 工作流设计84
5.1 集中式工作流84
5.2 功能分支工作流85
5.3 Git Flow工作流88
5.3.1 Git Flow的5种分支88
5.3.2 Git Flow开发流程88
5.4 Forking工作流91
5.5 本章总结93
第6章 研发流程设计95
6.1 如何设计Go项目的研发流程95
6.2 在设计研发流程时,需要关注
哪些点96
6.3 业界相对标准的研发流程96
6.3.1 需求阶段96
6.3.2 设计阶段98
6.3.3 开发阶段98
6.3.4 测试阶段100
6.3.5 发布阶段100
6.3.6 运营阶段102
6.4 角色与分工102
6.5 如何管理应用的生命周期104
6.6 应用生命周期管理技术有哪些104
6.7 研发模式105
6.8 CI/CD:自动化构建和部署应用106
6.8.1 持续集成107
6.8.2 持续交付107
6.8.3 持续部署107
6.9 DevOps:研发运维一体化108
6.9.1 AIOps:智能运维108
6.9.2 ChatOps:聊着天就把事情
给办了109
6.9.3 GitOps:一种实现云原生的
持续交付模型109
6.9.4 NoOps:无运维110
6.10 如何选择合适的应用生命周期
管理技术111
6.11 本章总结111
第7章 如何写出优雅的Go项目112
7.1 优雅Go项目实现思路112
7.2 编写高质量的Go应用113
7.2.1 代码结构114
7.2.2 代码规范115
7.2.3 代码质量116
7.2.4 编程哲学119
7.2.5 软件设计方法124
7.3 高效管理项目125
7.3.1 高效的开发流程125
7.3.2 使用Makefile管理项目126
7.3.3 自动生成代码126
7.3.4 善于借助工具127
7.3.5 对接CI/CD127
7.4 编写高质量的项目文档128
7.5 本章总结128
第8章 Go语言设计模式?130
8.1 创建型模式131
8.1.1 单例模式131
8.1.2 工厂模式133
8.2 行为型模式136
8.2.1 策略模式136
8.2.2 模板模式138
8.3 结构型模式139
8.3.1 代理模式139
8.3.2 选项模式140
8.4 本章总结144
第三部分 项目管理
第9章 如何编写Makefile148
9.1 规划Makefile要实现的功能149
9.2 设计合理的Makefile结构151
9.3 掌握Makefile编写技巧153
9.3.1 善用通配符和自动变量153
9.3.2 善用函数153
9.3.3 依赖需要用到的工具154
9.3.4 把常用功能放在/Makefile中,
不常用的放在分类Makefile中154
9.3.5 编写可扩展的Makefile155
9.3.6 将所有输出存放在一个目录下,
方便清理和查找156
9.3.7 使用带层级的命名方式156
9.3.8 做好目标拆分157
9.3.9 设置OPTIONS157
9.3.10 定义环境变量158
9.3.11 自己调用自己159
9.4 本章总结159
第10章 IAM项目研发流程实战160
10.1 开发阶段160
10.1.1 代码开发160
10.1.2 代码提交165
10.2 测试阶段167
10.3 IAM项目的Makefile项目管理
技巧168
10.3.1 Makefile help命令自动解析169
10.3.2 在options中指定变量值169
10.3.3 自动生成CHANGELOG169
10.3.4 自动生成版本号169
10.3.5 保持行为一致170
10.4 本章总结171
第11章 静态代码检查172
11.1 为什么选择golangci-lint做静态
代码检查172
11.2 golangci-lint命令173
11.3 golangci-lint配置175
11.4 如何使用golangci-lint进行静态
代码检查178
11.5 golangci-lint使用技巧180
11.6 本章总结182
第12章 生成Swagger API文档183
12.1 Swagger介绍183
12.2 Swagger和OpenAPI的区别184
12.3 用go-swagger来生成Swagger API
文档184
12.3.1 安装swagger工具185
12.3.2 swagger命令行工具介绍185
12.4 如何使用swagger命令生成
Swagger文档186
12.4.1 解析注释生成Swagger文档186
12.4.2 go-swagger其他常用功能介绍192
12.5 IAM Swagger文档194
12.6 本章总结195
第四部分 项目开发
第13章 错误处理198
13.1 错误码设计198
13.1.1 期望错误码实现的功能199
13.1.2 常见的错误码实现方式199
13.1.3 错误码设计建议201
13.1.4 业务Code码设计201
13.1.5 如何设置HTTP状态码202
13.2 IAM项目错误码设计规范203
13.2.1 错误码设计规范203
13.2.2 错误信息规范说明204
13.2.3 IAM API返回值说明204
13.3 错误包204
13.3.1 错误包需要具有哪些功能204
13.3.2 错误包的实现208
13.3.3 如何记录错误212
13.4 一个错误码的具体实现215
13.5 错误码实际使用示例218
13.6 本章总结219
第14章 日志处理220
14.1 如何设计日志包220
14.1.1 基础功能220
14.1.2 高级功能222
14.1.3 可选功能224
14.1.4 设计时需要关注的点226
14.2 如何记录日志226
14.2.1 在何处打印日志227
14.2.2 在哪个日志级别打印日志228
14.2.3 如何记录日志内容229
14.2.4 记录日志的佳实践总结230
14.3 拓展内容:分布式日志解决方案
(EFK/ELK)230
14.4 有哪些优秀的开源日志包231
14.4.1 标准库log包232
14.4.2 glog232
14.4.3 logrus232
14.4.4 zap233
14.4.5 开源日志包选择233
14.5 从零开始编写一个日志包234
14.5.1 定义日志级别和日志选项234
14.5.2 创建Logger及各级别日志
打印方法236
14.5.3 将日志记录到支持的输出中237
14.5.4 自定义日志输出格式239
14.5.5 测试日志包239
14.6 IAM项目日志包设计实战240
14.7 本章总结244
第15章 GORM ORM应用245
15.1 GORM基础知识245
15.2 通过示例学习GORM246
15.2.1 自动迁移表结构248
15.2.2 插入表记录248
15.2.3 获取符合条件的记录248
15.2.4 更新表记录248
15.2.5 删除表记录249
15.2.6 获取表记录列表249
15.3 GORM常用操作讲解249
15.3.1 模型定义250
15.3.2 连接数据库251
15.3.3 创建记录251
15.3.4 删除记录252
15.3.5 更新记录253
15.3.6 查询数据253
15.3.7 高级查询254
15.3.8 原生SQL255
15.3.9 GORM钩子255
15.4 iam-apiserver中的CURD操作256
15.5 本章总结260
第16章 Web服务功能实现261
16.1 Web服务的核心功能261
16.1.1 基础功能262
16.1.2 高级功能262
16.2 Web框架为什么选择Gin263
16.3 Gin是如何支持Web服务的基础
功能的264
16.3.1 HTTP/HTTPS支持268
16.3.2 JSON数据格式支持269
16.3.3 路由匹配270
16.3.4 路由分组270
16.3.5 一进程多服务271
16.3.6 参数解析、参数校验、逻辑
处理、返回结果272
16.4 Gin是如何支持Web服务的高级
功能的274
16.4.1 中间件274
16.4.2 认证、RequestID、跨域277
16.4.3 优雅关停277
16.5 本章总结279
第17章 IAM应用构建280
17.1 如何构建应用框架280
17.2 应用构建三剑客281
17.2.1 命令行参数解析工具:Pflag281
17.2.2 配置解析神器:Viper285
17.2.3 现代化的命令行框架:Cobra291
17.3 构建应用的基础:应用的三大
基本功能297
17.4 iam-apiserver是如何构建应用
框架的298
17.5 App包的设计和实现300
17.5.1 构建应用301
17.5.2 命令行程序构建301
17.5.3 命令行参数解析302
17.5.4 配置文件解析305
17.6 IAM应用构建的优秀特性306
17.7 构建应用的注意事项307
17.8 本章总结307
第18章 IAM认证功能实现309
18.1 认证与授权的区别309
18.2 4种基本的认证方式310
18.2.1 基础认证310
18.2.2 摘要认证311
18.2.3 开放授权认证312
18.2.4 令牌认证314
18.3 基于JWT的Token认证机制实现314
18.3.1 JWT简介314
18.3.2 JWT认证流程315
18.3.3 JWT格式315
18.4 如何设计IAM项目的认证功能318
18.5 IAM项目是如何实现Basic
认证的320
18.6 IAM项目是如何实现Bearer
认证的326
18.6.1 iam-authz-server Bearer认证
猜您喜欢