本書深入地講解了Go語(yǔ)言常見(jiàn)特性的內(nèi)部機(jī)制和實(shí)現(xiàn)方式,大部分內(nèi)容源自對(duì)Go源碼的分析,并從中提煉出實(shí)現(xiàn)原理。通過(guò)閱讀本書,讀者可以快速、輕松地了解Go語(yǔ)言的內(nèi)部運(yùn)作機(jī)制。本書首先介紹常見(jiàn)數(shù)據(jù)結(jié)構(gòu)及控制結(jié)構(gòu)的實(shí)現(xiàn)原理,包括管道、切片、Hash表、select和for-range等,這部分內(nèi)容大都以幾個(gè)精心準(zhǔn)備的測(cè)驗(yàn)題目開(kāi)頭,每個(gè)測(cè)驗(yàn)題目均對(duì)應(yīng)一個(gè)知識(shí)點(diǎn),讀者借此可以測(cè)驗(yàn)自身對(duì)該知識(shí)點(diǎn)的掌握程度。接著介紹了Go語(yǔ)言最核心的概念,包括協(xié)程的概念、協(xié)程調(diào)度模型、協(xié)程調(diào)度策略,以及內(nèi)存分配和垃圾回收相關(guān)的內(nèi)容。本書還介紹了測(cè)試、泛型、依賴管理等比較實(shí)用的特性。最后結(jié)合筆者的見(jiàn)聞,整理了一些發(fā)生在真實(shí)項(xiàng)目中的編程陷阱。
任洪彩華為云原生開(kāi)源團(tuán)隊(duì)成員,CNCF(云原生計(jì)算基金會(huì))官方大使,Kubernetes、Karmada等項(xiàng)目的資深維護(hù)者。華為員工培訓(xùn)中心講師,負(fù)責(zé)Go語(yǔ)言培訓(xùn)及軟件工程能力建設(shè)。在Nokia、華為等公司參與過(guò)多個(gè)大型項(xiàng)目的研發(fā)與重構(gòu),對(duì)Go、C/C++、Python、Swift等語(yǔ)言均有深入的研究與實(shí)踐。
第1章 常見(jiàn)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)原理
1.1 管道
1.1.1 熱身測(cè)驗(yàn)
1.1.2 特性速覽
1.1.3 實(shí)現(xiàn)原理
1.2 slice
1.2.1 熱身測(cè)驗(yàn)
1.2.2 特性速覽
1.2.3 實(shí)現(xiàn)原理
1.2.4 切片表達(dá)式
1.3 map
1.3.1 熱身測(cè)驗(yàn)
1.3.2 特性速覽
1.3.3 實(shí)現(xiàn)原理
1.4 struct
1.4.1 熱身測(cè)驗(yàn)
1.4.2 內(nèi)嵌字段
1.4.3 方法受體
1.4.4 字段標(biāo)簽
1.5 iota
1.5.1 熱身測(cè)驗(yàn)
1.5.2 特性速覽
1.5.3 實(shí)現(xiàn)原理
1.6 string
1.6.1 熱身測(cè)驗(yàn)
1.6.2 特性速覽
1.6.3 實(shí)現(xiàn)原理
1.7 sync.Map
1.7.1 熱身測(cè)驗(yàn)
1.7.2 特性速覽
1.7.3 實(shí)現(xiàn)原理
第2章 控制結(jié)構(gòu)
2.1 select
2.1.1 熱身測(cè)驗(yàn)
2.1.2 特性速覽
2.1.3 實(shí)現(xiàn)原理
2.2 for-range
2.2.1 熱身測(cè)驗(yàn)
2.2.2 特性速覽
2.2.3 實(shí)現(xiàn)原理
第3章 協(xié)程
3.1 協(xié)程的概念
3.2 調(diào)度模型
3.3 調(diào)度策略
第4章 內(nèi)存管理
4.1 內(nèi)存分配
4.2 垃圾回收
4.3 逃逸分析
第5章 并發(fā)控制
5.1 Channel
5.2 WaitGroup
5.3 Context
5.4 mutex
5.5 RWMutex
5.5.1 讀寫鎖的數(shù)據(jù)結(jié)構(gòu)
5.5.2 場(chǎng)景分析
第6章 反射
6.1 熱身測(cè)驗(yàn)
6.2 接口
6.3 反射定律
第7章 測(cè)試
7.1 快速開(kāi)始
7.1.1 單元測(cè)試
7.1.2 基準(zhǔn)測(cè)試
7.1.3 示例測(cè)試
7.1.4 模糊測(cè)試
7.2 進(jìn)階測(cè)試
7.2.1 子測(cè)試
7.2.2 Main測(cè)試
7.3 實(shí)現(xiàn)原理
7.3.1 testing.common
7.3.2 testing.TB接口
7.3.3 單元測(cè)試的實(shí)現(xiàn)原理
7.3.4 性能測(cè)試的實(shí)現(xiàn)原理
7.3.5 示例測(cè)試的實(shí)現(xiàn)原理
7.3.6 模糊測(cè)試的實(shí)現(xiàn)原理
7.3.7 Main測(cè)試的實(shí)現(xiàn)原理
7.3.8 go test的工作機(jī)制
7.4 擴(kuò)展閱讀
7.4.1 測(cè)試參數(shù)
7.4.2 benchstat
第8章 異常處理
8.1 error
8.1.1 熱身測(cè)驗(yàn)
8.1.2 基礎(chǔ)error
8.1.3 鏈?zhǔn)絜rror
8.1.4 工程遷移
8.2 defer
8.2.1 熱身測(cè)驗(yàn)
8.2.2 約法三章
8.2.3 實(shí)現(xiàn)原理
8.2.4 性能優(yōu)化
8.3 panic
8.3.1 熱身測(cè)驗(yàn)
8.3.2 工作機(jī)制
8.3.3 源碼剖析
8.4 recover
8.4.1 熱身測(cè)驗(yàn)
8.4.2 工作機(jī)制
8.4.3 源碼剖析
第9章 定時(shí)器
9.1 一次性定時(shí)器(Timer)
9.1.1 快速開(kāi)始
9.1.2 實(shí)現(xiàn)原理
9.2 周期性定時(shí)器(Ticker)
9.2.1 快速開(kāi)始
9.2.2 實(shí)現(xiàn)原理
9.3 runtimeTimer
9.3.1 實(shí)現(xiàn)原理
9.3.2 性能優(yōu)化
9.4 案例分享
第10章 語(yǔ)法糖
10.1 簡(jiǎn)短變量聲明符
10.1.1 熱身測(cè)驗(yàn)
10.1.2 規(guī)則
10.2 可變參函數(shù)
第11章 泛型
11.1 快速開(kāi)始
11.2 泛型總覽
11.3 類型約束
11.4 泛型舉例
11.4.1 泛型示例:MapKeys
11.4.2 泛型應(yīng)用舉例:Set
11.4.3 泛型應(yīng)用舉例:Sort
11.5 泛型小結(jié)
第12章 依賴管理
12.1 GOPATH
12.2 vendor
12.3 Go Module
12.3.1 Go Module基礎(chǔ)
12.3.2 快速實(shí)踐
12.3.3 replace指令
12.3.4 exclude指令
12.3.5 indirect指令
12.3.6 版本選擇機(jī)制
12.3.7 incompatible
12.3.8 偽版本
12.3.9 依賴包存儲(chǔ)
12.3.10 go.sum
12.3.11 模塊代理
12.3.12 GOSUMDB的工作機(jī)制
12.3.13 GOSUMDB的實(shí)現(xiàn)原理
12.3.14 第三方代理
12.3.15 私有模塊
12.3.16 Go Module 演進(jìn)
第13章 編程陷阱
13.1 切片擴(kuò)容
13.2 空切片
13.3 append的本質(zhì)
13.4 循環(huán)變量引用
13.5 協(xié)程引用循環(huán)變量
13.6 recover失效