Go語(yǔ)言精華部分 ——并發(fā)和小而美的類型系統(tǒng)。
Go陷阱——主要論述使用Go過(guò)程中大家很困惑或容易出錯(cuò)的地方。
Go語(yǔ)言的哲學(xué)——總結(jié)Go的設(shè)計(jì)哲學(xué),懂得Go作者的設(shè)計(jì)意圖,才能更好地使用該語(yǔ)言。
Go語(yǔ)言的核心語(yǔ)言特性包括:類型系統(tǒng)、接口、并發(fā)。這三部分是Go語(yǔ)言精華、優(yōu)美、也是重要的特征,本書緊密圍繞這三個(gè)主題展開。以“類型系統(tǒng)”為例,Go語(yǔ)言中的類型有:簡(jiǎn)單類型、復(fù)合類型、命名類型、未命名類型、靜態(tài)類型、動(dòng)態(tài)類型、底層類型、接口類型、具體類型以及類型字面量等諸多概念,這些概念在其他Go類圖書里面鮮有介紹,本書試圖幫助讀者梳理清楚這些類型的含義,建立概念,認(rèn)清類型本質(zhì)并學(xué)會(huì)正確使用;在接口章節(jié),不單介紹了接口概念和用法,還深入分析了接口的機(jī)制,使讀者對(duì)Go語(yǔ)言非侵入式的接口有更深入的理解;在并發(fā)編程章節(jié),書中給出了5個(gè)并發(fā)編程范式,并用圖描述并發(fā)程序的模型,通俗易懂,這也是本書讀特點(diǎn)。此外本書還拿出一整章內(nèi)容介紹Go語(yǔ)言編程過(guò)程中可能遇到的陷阱,不僅告訴讀者陷阱是什么,正確使用方式是什么,同時(shí)也給出出現(xiàn)這種問(wèn)題的根本原因,使讀者后續(xù)能夠避免犯同樣的錯(cuò)誤。本書最后從哲學(xué)角度論述下Go語(yǔ)言的編程思想,相信Go語(yǔ)言愛好者一定可以從書中找到自己感興趣內(nèi)容
李文塔,現(xiàn)就職于騰訊,F(xiàn)iT(前身為財(cái)付通)支付賬戶核心DBA,高級(jí)工程師。近十年金融系統(tǒng)開發(fā)、運(yùn)維經(jīng)驗(yàn),先后參與2016年到2018年微信春節(jié)紅包項(xiàng)目和支付賬戶核心多地多活容災(zāi)項(xiàng)目。
目錄
第1章 基礎(chǔ)知識(shí)
1.1 語(yǔ)言簡(jiǎn)介
1.1.1 Go語(yǔ)言的誕生背景
1.1.2 語(yǔ)言特性
1.1.3 Go語(yǔ)言的特性
1.1.4 總結(jié)
1.2 初識(shí)Go程序
1.3 Go詞法單元
1.3.1 token
1.3.2 標(biāo)識(shí)符
1.3.3 操作符(operators)和分隔符(delimiters)
1.3.4 字面常量
1.3.5 總結(jié)
1.4 變量和常量
1.4.1 變量
1.4.2 常量
1.5 基本數(shù)據(jù)類型
1.5.1 布爾類型
1.5.2 整型
1.5.3 浮點(diǎn)型
1.5.4 復(fù)數(shù)類型
1.5.5 字符串
1.5.6 rune類型
1.6 復(fù)合數(shù)據(jù)類型
1.6.1 指針
1.6.2 數(shù)組
1.6.3 切片
1.6.4 map
1.6.5 struct
1.7 控制結(jié)構(gòu)
1.7.1 if語(yǔ)句
1.7.2 switch語(yǔ)句
1.7.3 for語(yǔ)句
1.7.4 標(biāo)簽和跳轉(zhuǎn)
第2章 函數(shù)
2.1 基本概念
2.1.1 函數(shù)定義
2.1.2 多值返回
2.1.3 實(shí)參到形參的傳遞
2.1.4 不定參數(shù)
2.2 函數(shù)簽名和匿名函數(shù)
2.2.1 函數(shù)簽名
2.2.2 匿名函數(shù)
2.3 defer
2.4 閉包
2.4.1 概念
2.4.2 閉包的價(jià)值
2.5 panic和recover
2.5.1 基本概念
2.5.2 使用場(chǎng)景
2.6 錯(cuò)誤處理
2.6.1 error
2.6.2 錯(cuò)誤和異常
2.7 底層實(shí)現(xiàn)
2.7.1 函數(shù)調(diào)用規(guī)約
2.7.2 匯編基礎(chǔ)
2.7.3 多值返回分析
2.7.4 閉包底層實(shí)現(xiàn)
第3章 類型系統(tǒng)
3.1 類型簡(jiǎn)介
3.1.1 命名類型和未命名類型
3.1.2 底層類型
3.1.3 類型相同和類型賦值
3.1.4 類型強(qiáng)制轉(zhuǎn)換
3.2 類型方法
3.2.1 自定義類型
3.2.2 方法
3.3 方法調(diào)用
3.3.1 一般調(diào)用
3.3.2 方法值(method value)
3.3.3 方法表達(dá)式(method expression)
3.3.4 方法集(method set)
3.3.5 值調(diào)用和表達(dá)式調(diào)用的方法集
3.4 組合和方法集
3.4.1 組合
3.4.2 組合的方法集
3.5 函數(shù)類型
第4章 接口
4.1 基本概念
4.1.1 接口聲明
4.1.2 接口初始化
4.1.3 接口方法調(diào)用
4.1.4 接口的動(dòng)態(tài)類型和靜態(tài)類型
4.2 接口運(yùn)算
4.2.1 類型斷言(Type Assertion)
4.2.2 類型查詢(Type Switches)
4.2.3 接口優(yōu)點(diǎn)和使用形式
4.3 空接口
4.3.1 基本概念
4.3.2 空接口的用途
4.3.3 空接口和nil
4.4 接口內(nèi)部實(shí)現(xiàn)
4.4.1 數(shù)據(jù)結(jié)構(gòu)
4.4.2 接口調(diào)用過(guò)程分析
4.4.3 接口調(diào)用代價(jià)
4.4.4 空接口數(shù)據(jù)結(jié)構(gòu)
第5章 并發(fā)
5.1 并發(fā)基礎(chǔ)
5.1.1 并發(fā)和并行
5.1.2 goroutine
5.1.3 chan
5.1.4 WaitGroup
5.1.5 select
5.1.6 扇入(Fan in)和扇出(Fan out)
5.1.7 通知退出機(jī)制
5.2 并發(fā)范式
5.2.1 生成器
5.2.2 管道
5.2.3 每個(gè)請(qǐng)求一個(gè)goroutine
5.2.4 固定worker工作池
5.2.5 future模式
5.3 context標(biāo)準(zhǔn)庫(kù)
5.3.1 context的設(shè)計(jì)目的
5.3.2 基本數(shù)據(jù)結(jié)構(gòu)
5.3.3 API函數(shù)
5.3.4 輔助函數(shù)
5.3.5 context的用法
5.3.6 使用context傳遞數(shù)據(jù)的爭(zhēng)議
5.4 并發(fā)模型
5.4.1 CSP簡(jiǎn)介
5.4.2 調(diào)度模型
5.4.3 并發(fā)和調(diào)度
第6章 反射
6.1 基本概念
6.1.1 基本數(shù)據(jù)結(jié)構(gòu)和入口函數(shù)
6.1.2 基礎(chǔ)類型
6.1.3 類型匯總
6.2 反射規(guī)則
6.2.1 反射API
6.2.2 反射三定律
6.3 inject庫(kù)
6.3.1 inject是什么
6.3.2 依賴注入和控制反轉(zhuǎn)
6.3.3 inject實(shí)踐
6.3.4 inject原理分析
6.4 反射的優(yōu)缺點(diǎn)
6.4.1 反射的優(yōu)點(diǎn)
6.4.2 反射的缺點(diǎn)
6.4.3 反射的最佳實(shí)踐
第7章 語(yǔ)言陷阱
7.1 多值賦值和短變量聲明
7.1.1 多值賦值
7.1.2 短變量的聲明和賦值
7.2 range復(fù)用臨時(shí)變量
7.3 defer陷阱
7.4 切片困惑
7.4.1 數(shù)組
7.4.2 切片
7.5 值、指針和引用
7.5.1 傳值還是傳引用
7.5.2 函數(shù)名的意義
7.5.3 引用語(yǔ)義
7.6 習(xí)慣用法
7.6.1 干凈與強(qiáng)迫癥
7.6.2 comma,ok表達(dá)式
7.6.3 簡(jiǎn)寫模式
7.6.4 包中的函數(shù)或方法設(shè)計(jì)
7.6.5 多值返回函數(shù)
第8章 工程管理
8.1 編程環(huán)境
8.1.1 環(huán)境搭建
8.1.2 工程結(jié)構(gòu)
8.1.3 交叉編譯
8.2 命名空間和作用域
8.2.1 命名空間
8.2.2 作用域
8.2.3 變量覆蓋
8.3 包的基本概念
8.3.1 基本概念
8.3.2 包引用
8.3.3 包加載
8.4 第三方包管理
8.4.1 vendor
8.4.2 dep
第9章 編程哲學(xué)
9.1 Go語(yǔ)言設(shè)計(jì)哲學(xué)
9.1.1 少即是多
9.1.2 世界是并行的
9.1.3 組合優(yōu)于繼承
9.1.4 非侵入式的接口
9.1.5 總結(jié)
9.2 Go語(yǔ)言發(fā)展史
9.2.1 站在巨人的肩膀上
9.2.2 里程碑
9.3 未來(lái)
9.3.1 爭(zhēng)議
9.3.2 Go 2