【作者】
陈剑煜(网名:煎鱼)微信公众号 “脑子进煎鱼了” 的作者,“Go夜读” SIG小组成员,对Go语言有一定的兴趣和经验。在社区连载过一系列 Go 语言相关的技术文章,其中“跟煎鱼学Go”系列广受欢迎。 徐新华(网名:polaris)Go语言中文网站长,目前在北京一家创业公司担任CTO。2011年北京大学硕士毕业,先后在开心网、奇虎360工作。一直从事服务端相关工作,有着丰富的经验。在Go1.0正式发布时开始接触Go语言,并将其用于工作中,。8年来一直致力于推广Go语言在 的发展,致力构建 Go语言中文社区。
【内容】
全书共分为6章,分别是命令行应用、HTTP应用、RPC应用、WebSocket 应用、进程内缓存和 Go语言中的大杀器,其中前5章是Go语言开发中 常见的项目类型。本书对项目开发、细节分析、运行时分析等核心内容进行了较为深入的剖析,提供了相对完整的项目实践经验。在项目迭代过程中,难免会遇到问题,因此本书针对Go语言的大杀器(分析工具)及常见问题进行了全面讲解,帮助读者对各类问题进行排查。本书适合有一定Go语言基础的读者以及相关开发人员阅读。
【目录】
第1章 命令行应用:打造属于自己的工具集1
1.1 工具之旅1
1.1.1 标准库flag1
1.1.2 初始化项目1
1.1.3 示例2
1.1.4 分析4
1.1.5 定义参数类型7
1.1.6 小结8
1.2 单词格式转换8
1.2.1 安装Cobra8
1.2.2 初始化cmd和word子命令8
1.2.3 单词转换9
1.2.4 word子命令11
1.2.5 验证12
1.2.6 小结13
1.3 便捷的时间工具13
1.3.1 获取时间14
1.3.2 推算时间14
1.3.3 初始化子命令15
1.3.4 验证17
1.3.5 时区问题17
1.3.6 参考时间的格式20
1.3.7 小结20
1.4 SQL语句到结构体的转换20
1.4.1 需要转换的数据结构21
1.4.2 生成结构体21
1.4.3 表到结构体的转换24
1.4.4 初始化子命令28
1.4.5 验证30
1.4.6 小结31
第2章 HTTP应用:写一个完整的博客后端32
2.1 博客之旅32
2.1.1 gin32
2.1.2 初始化项目32
2.1.3 安装gin32
2.1.4 快速启动33
2.1.5 验证34
2.1.6 源码分析34
2.1.7 小结38
2.2 项目设计39
2.2.1 目录结构39
2.2.2 数据库40
2.2.3 创建model42
2.2.4 路由43
2.2.5 处理程序44
2.2.6 启动接入45
2.2.7 验证46
2.2.8 小结46
2.3 公共组件46
2.3.1 错误码标准化47
2.3.2 配置管理50
2.3.3 数据库连接55
2.3.4 日志写入56
2.3.5 响应处理62
2.3.6 小结65
2.4 接口文档65
2.4.1 Swagger简介65
2.4.2 OpenAPI和Swagger66
2.4.3 安装 Swagger66
2.4.4 写入注解66
2.4.5 生成68
2.4.6 路由68
2.4.7 查看接口文档69
2.4.8 源码分析70
2.4.9 存在的问题72
2.4.10 小结73
2.5 接口校验73
2.5.1 validator介绍73
2.5.2 业务接口校验74
2.5.3 化处理75
2.5.4 二次封装77
2.5.5 验证78
2.5.6 小结79
2.6 模块开发:标签管理80
2.6.1 新建model方法80
2.6.2 处理model回调81
2.6.3 新建dao方法84
2.6.4 新建service方法85
2.6.5 新增业务错误码86
2.6.6 新增路由方法87
2.6.7 验证接口89
2.6.8 发现问题89
2.6.9 解决问题90
2.6.10 小结91
2.7 模块开发:文章管理91
2.7.1 新建model方法91
2.7.2 新建dao方法95
2.7.3 新建service方法98
2.7.4 新增业务错误码100
2.7.5 新增路由方法101
2.7.6 验证接口103
2.7.7 发现问题103
2.7.8 解决问题104
2.8 上传图片和文件服务105
2.8.1 新增配置105
2.8.2 上传文件105
2.8.3 新建service方法109
2.8.4 新增业务错误码109
2.8.5 新增路由方法110
2.8.6 验证接口111
2.8.7 文件服务111
2.8.8 源码分析111
2.8.9 小结112
2.9 API访问控制112
2.9.1 JWT简介113
2.9.2 JWT的使用场景115
2.9.3 安装JWT115
2.9.4 配置JWT115
2.9.5 处理JWT令牌116
2.9.6 获取JWT令牌118
2.9.7 处理应用中间件121
2.9.8 小结123
2.10 常见应用中间件123
2.10.1 访问日志记录124
2.10.2 异常捕获处理125
2.10.3 服务信息存储130
2.10.4 接口限流控制131
2.10.5 统一超时控制134
2.10.6 注册中间件136
2.11 链路追踪137
2.11.1 OpenTracing规范137
2.11.2 Jaeger的使用138
2.11.3 在应用中注入追踪139
2.11.4 验证跟踪情况141
2.11.5 实现日志追踪142
2.11.6 实现SQL追踪145
2.11.7 小结146
2.12 应用配置问题147
2.12.1 配置读取147
2.12.2 配置热 新151
2.12.3 小结153
2.13 编译程序应用153
2.13.1 编译简介154
2.13.2 交叉编译158
2.13.3 编译缓存158
2.13.4 编译文件大小159
3.13.5 编译信息写入160
2.13.6 小结162
2.14 优雅重启和停止163
2.14.1 遇到的问题163
2.14.2 解决方案164
2.14.3 常用的快捷键164
2.14.4 实现优雅重启和停止165
2.14.5 小结166
2.15 思考167
2.15.1 总结167
2.15.2 作业167
第3章 RPC应用:启动你的RPC服务169
3.1 gRPC和Protobuf169
3.1.1 gRPC简介169
3.1.2 Protobuf简介170
3.1.3 gRPC的优点和缺点172
3.1.4 小结174
3.2 Protobuf的使用174
3.2.1 安装Protobuf174
3.2.2 初始化Demo项目175
3.2.3 编译和生成proto文件176
3.2.4 多的数据类型支持178
3.2.5 小结180
3.3 gRPC的使用180
3.3.1 安装gRPC180
3.3.2 gRPC的调用方式180
3.3.3 Unary和Streaming RPC187
3.3.4 客户端与服务端是如何交互的188
3.3.5 小结193
3.4 运行一个gRPC服务194
3.4.1 初始化项目194
3.4.2 编译和生成proto文件194
3.4.3 编写gRPC方法196
3.4.4 编写启动文件198
3.4.5 调试gRPC接口198
3.4.6 gRPC的错误处理199
3.4.7 源码分析204
3.5 gRPC服务间的内调205
3.5.1 进行gRPC调用206
3.5.2 grpc.Dial做了什么206
3.6 提供HTTP接口209
3.6.1 支持其他协议209
3.6.2 另起端口监听HTTP209
3.6.3 在同端口监听HTTP211
3.6.4 同端口同方法提供双流量支持213
3.6.5 其他方案221
3.7 接口文档221
3.7.1 安装和下载221
3.7.2 静态资源转换221
3.7.3 Swagger UI的处理和访问222
3.7.4 Swagger描述文件的生成和读取223
3.7.5 查看接口文档224
3.7.6 小结224
3.8 gRPC拦截器225
3.8.1 拦截器的类型225
3.8.2 客户端和服务端拦截器225
3.8.3 实现一个拦截器226
3.8.4 实现多个拦截器227
3.8.5 “用”多个拦截器228
3.8.6 常用服务端拦截器230
3.8.7 常用客户端拦截器232
3.8.8 演示235
3.9 metadata和RPC自定义认证237
3.9.1 metadata介绍237
3.9.2 metadata是如何传递的239
3.9.3 对RPC方法做自定义认证240
3.9.4 小结242
3.10 链路追踪242
3.10.1 注入追踪信息243
3.10.2 初始化Jaeger243
3.10.3 metadata的读取和设置244
3.10.4 服务端245
3.10.5 客户端246
3.10.6 实现HTTP追踪247
3.10.7 验证248
3.10.8 小结249
3.11 gRPC服务注册和发现249
3.11.1 服务注册和发现250
3.11.2 gRPC负载均衡策略251
3.11.3 实现服务注册和发现254
3.11.4 其他方案257
3.12 实现自定义的protoc插件257
3.12.1 插件的内部逻辑258
3.12.2 generator.Plugin接口259
3.12.3 FileDescriptor属性259
3.12.4 实现一个简单的自定义插件262
3.12.5 实现 化的gRPC自定义插件265
3.12.6 小结272
3.13 对gRPC接口进行版本管理272
3.13.1 接口变 273
3.13.2 可兼容性修改273
3.1
返回顶部