展开全部

主编推荐语

一本书吃透一整套Go项目开发框架。

内容简介

全书分为两篇:

第一篇详细介绍Go语言高性能优势是如何实现的,包括经典的GMP调度模型,Go语言调度器的实现,垃圾回收,以及如何基于管道、锁等并发编程。

第二篇主要是项目实战,手把手带领读者从0开始搭建高性能、高稳定的Go服务。以及在面对线上问题时,如何调试、分析、解决。

目录

  • 版权信息
  • 前言
  • 第1章 为什么要了解Go底层
  • 1.1 Go服务怎么出现502状态码了
  • 1.1.1 服务超时为什么导致502状态码
  • 1.1.2 基于context的超时控制
  • 1.2 Go服务为什么没响应了
  • 1.2.1 谁阻塞了协程
  • 1.2.2 写管道可以不阻塞协程吗
  • 1.3 Uber如何通过GC调优节约7万个内核
  • 1.3.1 GC概述
  • 1.3.2 Uber半自动化GC调优
  • 1.4 Go语言进阶路线
  • 1.4.1 Go语言快速入门
  • 1.4.2 Go高并发编程
  • 1.4.3 Go语言项目实战
  • 1.5 本章小结
  • 第2章 Go语言并发模型
  • 2.1 GMP调度模型
  • 2.1.1 Go语言并发编程入门
  • 2.1.2 GMP调度模型概述
  • 2.1.3 深入理解GMP调度模型
  • 2.2 协程管理
  • 2.2.1 基础补充
  • 2.2.2 协程创建
  • 2.2.3 协程切换
  • 2.2.4 协程栈会溢出吗
  • 2.2.5 协程退出
  • 2.3 调度器
  • 2.3.1 调度器实现原理
  • 2.3.2 时间片调度
  • 2.3.3 基于协作的抢占式调度
  • 2.3.4 基于信号的抢占式调度
  • 2.4 本章小结
  • 第3章 调度器触发时机
  • 3.1 网络I/O
  • 3.1.1 探索Go语言网络I/O
  • 3.1.2 Go语言网络I/O与调度器
  • 3.1.3 如何实现网络读写超时
  • 3.2 管道
  • 3.2.1 管道的基本用法
  • 3.2.2 管道与调度器
  • 3.3 定时器
  • 3.3.1 定时器的基本用法
  • 3.3.2 定时器与调度器
  • 3.4 系统调用
  • 3.4.1 系统调用会阻塞线程吗
  • 3.4.2 系统调用与调度器
  • 3.5 本章小结
  • 第4章 Go语言并发编程
  • 4.1 什么是并发问题
  • 4.2 CSP并发模型
  • 4.2.1 基于管道-协程的CSP模型
  • 4.2.2 管道与select关键字
  • 4.2.3 如何实现无限缓存管道
  • 4.3 基于锁的协程同步
  • 4.3.1 乐观锁
  • 4.3.2 悲观锁
  • 4.4 如何并发操作map
  • 4.4.1 map的并发问题
  • 4.4.2 并发散列表sync.Map
  • 4.5 并发控制sync.WaitGroup
  • 4.6 并发对象池sync.Pool
  • 4.7 如何实现单例模式
  • 4.8 并发检测
  • 4.9 本章小结
  • 第5章 GC原理、调度与调优
  • 5.1 内存管理
  • 5.1.1 如何设计动态内存分配器
  • 5.1.2 Go语言内存分配器
  • 5.1.3 Go语言内存管理
  • 5.1.4 内存逃逸
  • 5.2 三色标记与写屏障
  • 5.2.1 三色标记
  • 5.2.2 写屏障
  • 5.3 标记与清理
  • 5.3.1 垃圾回收执行阶段
  • 5.3.2 经典的stopTheWorld
  • 5.3.3 辅助标记
  • 5.3.4 内存清理
  • 5.4 GC调度与GC调优
  • 5.4.1 GC触发时机
  • 5.4.2 GC协程调度模式
  • 5.4.3 缓存框架bigcache中的GC调优
  • 5.5 本章小结
  • 第6章 手把手教你搭建Go项目
  • 6.1 Go项目架构设计
  • 6.1.1 分层架构
  • 6.1.2 代码布局
  • 6.1.3 命令管理cobra
  • 6.1.4 配置管理Viper
  • 6.2 Web框架Gin
  • 6.2.1 RESTful API
  • 6.2.2 引入Gin框架
  • 6.2.3 中间件
  • 6.2.4 如何记录访问日志
  • 6.3 日志与全链路追踪
  • 6.3.1 引入日志框架Zap
  • 6.3.2 基于context的全链路追踪
  • 6.3.3 基于协程ID的全链路追踪
  • 6.4 访问数据库
  • 6.4.1 引入Gorm框架
  • 6.4.2 CURD
  • 6.4.3 事务
  • 6.4.4 如何记录Trace日志
  • 6.5 HTTP调用
  • 6.5.1 go-resty框架概述
  • 6.5.2 请求追踪
  • 6.5.3 长连接还是短连接
  • 6.5.4 如何记录Trace日志
  • 6.6 单元测试
  • 6.6.1 Go语言中的单元测试
  • 6.6.2 引入单元测试
  • 6.7 本章小结
  • 第7章 高性能Go服务开发
  • 7.1 分库分表
  • 7.1.1 分库分表基本原理
  • 7.1.2 基于Gorm的分表
  • 7.2 使用Redis缓存
  • 7.2.1 go-redis的基本操作
  • 7.2.2 基于Redis的性能优化
  • 7.3 使用本地缓存
  • 7.3.1 自己实现一个LRU缓存
  • 7.3.2 基于bigcache的性能优化
  • 7.4 资源复用
  • 7.4.1 协程复用之fasthttp
  • 7.4.2 连接复用之连接池
  • 7.4.3 对象复用之对象池
  • 7.5 其他
  • 7.5.1 异步化处理
  • 7.5.2 无锁编程
  • 7.6 本章小结
  • 第8章 高可用Go服务开发
  • 8.1 可用性定义与高可用三板斧
  • 8.1.1 可用性定义
  • 8.1.2 高可用三板斧
  • 8.2 流量治理组件Sentinel
  • 8.2.1 Sentinel快速入门
  • 8.2.2 流量控制
  • 8.2.3 系统自适应流量控制
  • 8.2.4 熔断降级
  • 8.2.5 Sentinel原理浅析
  • 8.3 Go服务监控
  • 8.3.1 运行时监控
  • 8.3.2 自定义监控
  • 8.4 其他
  • 8.4.1 超时控制
  • 8.4.2 错误处理
  • 8.5 本章小结
  • 第9章 Go语言微服务入门
  • 9.1 Go语言RPC标准库
  • 9.1.1 使用入门
  • 9.1.2 原理浅析
  • 9.2 微服务框架Kitex
  • 9.2.1 使用入门
  • 9.2.2 可扩展性
  • 9.2.3 服务治理
  • 9.3 本章小结
  • 第10章 实现Go服务平滑升级
  • 10.1 服务升级导致502状态码
  • 10.2 Go语言信号处理框架
  • 10.3 Go服务平滑退出
  • 10.4 基于gracehttp的Go服务平滑升级
  • 10.5 本章小结
  • 第11章 Go服务调试
  • 11.1 Go程序分析利器pprof
  • 11.1.1 pprof概述
  • 11.1.2 内存指标分析
  • 11.1.3 CPU指标分析
  • 11.1.4 锁与阻塞指标分析
  • 11.2 性能分析工具Trace
  • 11.3 使用dlv调试Go程序
  • 11.3.1 Go语言调试工具dlv
  • 11.3.2 dlv调试实战
  • 11.4 本章小结
  • 第12章 线上服务实战
  • 12.1 两种导致502状态码的情况
  • 12.1.1 panic异常
  • 12.1.2 长连接为什么会导致502状态码
  • 12.2 意想不到的并发问题
  • 12.2.1 并发问题引起的JSON序列化异常
  • 12.2.2 并发问题引起的服务发现故障
  • 12.3 HTTP服务假死问题
  • 12.3.1 写日志阻塞请求
  • 12.3.2 防缓存穿透组件导致的服务死锁
  • 12.4 HTTP客户端引发的问题
  • 12.4.1 长连接还是短连接
  • 12.4.2 偶现Connection reset by peer问题
  • 12.5 类型不匹配导致的线上问题
  • 12.5.1 一个双引号引起的线上事故
  • 12.5.2 自定义JSON序列化与反序列化
  • 12.6 其他问题
  • 12.6.1 怎么总是空指针异常
  • 12.6.2 诡异的超时问题
  • 12.7 本章小结
展开全部

评分及书评

评分不足
1个评分

出版方

机械工业出版社

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。