GO底层原理与工程化实践
¥
74.3
7.5折
¥
99
全新
库存18件
作者李乐,陈雷 著
出版社机械工业出版社
ISBN9787111758266
出版时间2024-07
装帧平装
开本32开
定价99元
货号1203311792
上书时间2024-12-04
商品详情
- 品相描述:全新
- 商品描述
-
目录
前言
第1章 为什么要了解Go底层1
1.1 Go服务怎么出现502状态码了1
1.1.1 服务超时为什么导致502状态码1
1.1.2 基于context的超时控制4
1.2 Go服务为什么没响应了7
1.2.1 谁阻塞了协程7
1.2.2 写管道可以不阻塞协程吗10
1.3 Uber如何通过GC调优节约7万个内核11
1.3.1 GC概述11
1.3.2 Uber半自动化GC调优13
1.4 Go语言进阶路线15
1.4.1 Go语言快速入门16
1.4.2 Go高并发编程20
1.4.3 Go语言项目实战22
1.5 本章小结24
第2章 Go语言并发模型25
2.1 GMP调度模型25
2.1.1 Go语言并发编程入门25
2.1.2 GMP调度模型概述27
2.1.3 深入理解GMP调度模型30
2.2 协程管理33
2.2.1 基础补充33
2.2.2 协程创建37
2.2.3 协程切换40
2.2.4 协程栈会溢出吗42
2.2.5 协程退出45
2.3 调度器46
2.3.1 调度器实现原理46
2.3.2 时间片调度49
2.3.3 基于协作的抢占式调度52
2.3.4 基于信号的抢占式调度53
2.4 本章小结54
第3章 调度器触发时机55
3.1 网络I/O56
3.1.1 探索Go语言网络I/O56
3.1.2 Go语言网络I/O与调度器59
3.1.3 如何实现网络读写超时62
3.2 管道65
3.2.1 管道的基本用法65
3.2.2 管道与调度器67
3.3 定时器70
3.3.1 定时器的基本用法70
3.3.2 定时器与调度器73
3.4 系统调用75
3.4.1 系统调用会阻塞线程吗75
3.4.2 系统调用与调度器77
3.5 本章小结79
第4章 Go语言并发编程80
4.1 什么是并发问题80
4.2 CSP并发模型84
4.2.1 基于管道-协程的CSP模型84
4.2.2 管道与select关键字86
4.2.3 如何实现无限缓存管道89
4.3 基于锁的协程同步91
4.3.1 乐观锁91
4.3.2 悲观锁93
4.4 如何并发操作map95
4.4.1 map的并发问题96
4.4.2 并发散列表sync.Map98
4.5 并发控制sync.WaitGroup101
4.6 并发对象池sync. Pool103
4.7 如何实现单例模式104
4.8 并发检测105
4.9 本章小结106
第5章 GC原理、调度与调优108
5.1 内存管理108
5.1.1 如何设计动态内存分配器108
5.1.2 Go语言内存分配器110
5.1.3 Go语言内存管理111
5.1.4 内存逃逸113
5.2 三色标记与写屏障114
5.2.1 三色标记115
5.2.2 写屏障117
5.3 标记与清理119
5.3.1 垃圾回收执行阶段120
5.3.2 经典的stopTheWorld123
5.3.3 辅助标记125
5.3.4 内存清理127
5.4 GC调度与GC调优128
5.4.1 GC触发时机128
5.4.2 GC协程调度模式131
5.4.3 缓存框架bigcache中的GC调优133
5.5 本章小结135
第6章 手把手教你搭建Go项目136
6.1 Go项目架构设计 136
6.1.1 分层架构136
6.1.2 代码布局138
6.1.3 命令管理cobra140
6.1.4 配置管理Viper142
6.2 Web框架Gin145
6.2.1 RESTful API145
6.2.2 引入Gin框架146
6.2.3 中间件149
6.2.4 如何记录访问日志152
6.3 日志与全链路追踪154
6.3.1 引入日志框架Zap154
6.3.2 基于context的全链路追踪157
6.3.3 基于协程ID的全链路追踪159
6.4 访问数据库161
6.4.1 引入Gorm框架161
6.4.2 CURD165
6.4.3 事务170
6.4.4 如何记录Trace日志172
6.5 HTTP调用173
6.5.1 go-resty框架概述174
6.5.2 请求追踪176
6.5.3 长连接还是短连接178
6.5.4 如何记录Trace日志180
6.6 单元测试181
6.6.1 Go语言中的单元测试181
6.6.2 引入单元测试183
6.7 本章小结184
第7章 高性能Go服务开发186
7.1 分库分表186
7.1.1 分库分表基本原理186
7.1.2 基于Gorm的分表189
7.2 使用Redis缓存191
7.2.1 go-redis的基本操作191
7.2.2 基于Redis的性能优化193
7.3 使用本地缓存196
7.3.1 自己实现一个LRU缓存196
7.3.2 基于bigcache的性能优化198
7.4 资源复用200
7.4.1 协程复用之fasthttp200
7.4.2 连接复用之连接池203
7.4.3 对象复用之对象池205
7.5 其他207
7.5.1 异步化处理207
7.5.2 无锁编程209
7.6 本章小结210
第8章 高可用Go服务开发211
8.1 可用性定义与高可用三板斧 211
8.1.1 可用性定义211
8.1.2 高可用三板斧213
8.2 流量治理组件Sentinel215
8.2.1 Sentinel快速入门215
8.2.2 流量控制218
8.2.3 系统自适应流量控制220
8.2.4 熔断降级222
8.2.5 Sentinel原理浅析224
8.3 Go服务监控225
……
内容摘要
为什么要深入学习Go语言?
Go语言是目前的主流语言之一,具有入门快、高性能、开发效率高等特点,目前越来越多的互联网企业都在使用Go语言。另外,云原生体系中的Kubernetes、Docker等开源项目就是基于Go语言开发的,想要深入研究云原生技术,就必须精通Go语言。最后,只有对Go语言底层有一定了解,才能开发出高性能、高可用的Go服务,并在解决线上问题、性能调优时游刃有余。
你能学到什么?
Go高并发特性与并发编程技巧:高并发是Go语言的特色,本书详细剖析了Go语言是如何实现高并发的,包括GMP调度模型的基本概念、协程与调度器的实现原理、Go语言常用的几种多协程同步方案,以及内存管理、垃圾回收及其调优。
项目实战经验:本书以经典的商城项目为例,分享了很多Go项目开发经验,包括常用开源框架的使用技巧与核心原理、高性能与高可用的Go服务开发、Go服务平滑升级等。
线上问题解决方案:本书列举了10余个线上典型问题,并讲解了这些问题的解决思路。这些问题都是Go语言初学者非常容易遇到的,相信读者能从这些问题中吸取经验,总结出一套解决问题的方法论。
主编推荐
1)知名企业资深Go开发专家联合撰写,从原理到实践,助你掌握Go语言精髓,授你项目实战经验
2)深入剖析Go语言的核心原理,从0到1带你实现高性能高可用的Go服务开发,详细介绍10多个线上典型问题以及解决思路
— 没有更多了 —
以下为对购买帮助不大的评价