本書主要分三個方面介紹Go語言:Go語言精華——并發(fā)和小而美的類型系統(tǒng);Go語言缺陷;Go語言的哲學。本書重點介紹Go語言的實踐和并發(fā)編程范式,力求讓讀者不但清楚并發(fā)的基本語法和原理,還學會怎么去使用。本書對Go語言規(guī)范中的命名類型、非命名類型,底層類型,動態(tài)類型等概念進行闡述,讓開發(fā)者對Go的類型系統(tǒng)有全面的了解;同時,接口是Go類型系統(tǒng)最核心的一個元素,本書中也會花大量的筆墨進行介紹。Go雖然設(shè)計得小而美,但語言并不是完美的,有些陷阱和坑需要開發(fā)者特別小心,本書會專門介紹Go使用過程中的陷阱,包括: defer陷阱,接口nil,變量短聲明引發(fā)的困惑,range的臨時變量復(fù)用,slice底層數(shù)組重分配等。Go天然的并發(fā)支持能夠更好地建模實際問題,本書在最后的部分會介紹Go語言的設(shè)計哲學,包括采用組合這種更通用的模式以使得表現(xiàn)力更強;增加一個間接的中間層來解決實際問題,Go的分侵入式接口設(shè)計,基于接口的編程實現(xiàn)分層解耦。
騰訊FIT金融線支付核心系統(tǒng)DBA,高級工程師2012年接觸go,國內(nèi)第一批go語言使用者;先后在CSDN發(fā)表40多篇go相關(guān)技術(shù)博文gossh項目作者,近期準備開源(類似Ansible,經(jīng)過公司內(nèi)部3000多臺服務(wù)器驗證,快速、簡單、可擴展)
目錄
第1章 基礎(chǔ)知識
1.1 語言簡介
1.1.1 Go語言的誕生背景
1.1.2 語言特性
1.1.3 Go語言的特性
1.1.4 總結(jié)
1.2 初識Go程序
1.3 Go詞法單元
1.3.1 token
1.3.2 標識符
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 浮點型
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語句
1.7.2 switch語句
1.7.3 for語句
1.7.4 標簽和跳轉(zhuǎn)
第2章 函數(shù)
2.1 基本概念
2.1.1 函數(shù)定義
2.1.2 多值返回
2.1.3 實參到形參的傳遞
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 閉包的價值
2.5 panic和recover
2.5.1 基本概念
2.5.2 使用場景
2.6 錯誤處理
2.6.1 error
2.6.2 錯誤和異常
2.7 底層實現(xiàn)
2.7.1 函數(shù)調(diào)用規(guī)約
2.7.2 匯編基礎(chǔ)
2.7.3 多值返回分析
2.7.4 閉包底層實現(xiàn)
第3章 類型系統(tǒng)
3.1 類型簡介
3.1.1 命名類型和未命名類型
3.1.2 底層類型
3.1.3 類型相同和類型賦值
3.1.4 類型強制轉(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 方法表達式(method expression)
3.3.4 方法集(method set)
3.3.5 值調(diào)用和表達式調(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 接口的動態(tài)類型和靜態(tài)類型
4.2 接口運算
4.2.1 類型斷言(Type Assertion)
4.2.2 類型查詢(Type Switches)
4.2.3 接口優(yōu)點和使用形式
4.3 空接口
4.3.1 基本概念
4.3.2 空接口的用途
4.3.3 空接口和nil
4.4 接口內(nèi)部實現(xiàn)
4.4.1 數(shù)據(jù)結(jié)構(gòu)
4.4.2 接口調(diào)用過程分析
4.4.3 接口調(diào)用代價
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 通知退出機制
5.2 并發(fā)范式
5.2.1 生成器
5.2.2 管道
5.2.3 每個請求一個goroutine
5.2.4 固定worker工作池
5.2.5 future模式
5.3 context標準庫
5.3.1 context的設(shè)計目的
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ù)的爭議
5.4 并發(fā)模型
5.4.1 CSP簡介
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庫
6.3.1 inject是什么
6.3.2 依賴注入和控制反轉(zhuǎn)
6.3.3 inject實踐
6.3.4 inject原理分析
6.4 反射的優(yōu)缺點
6.4.1 反射的優(yōu)點
6.4.2 反射的缺點
6.4.3 反射的最佳實踐
第7章 語言陷阱
7.1 多值賦值和短變量聲明
7.1.1 多值賦值
7.1.2 短變量的聲明和賦值
7.2 range復(fù)用臨時變量
7.3 defer陷阱
7.4 切片困惑
7.4.1 數(shù)組
7.4.2 切片
7.5 值、指針和引用
7.5.1 傳值還是傳引用
7.5.2 函數(shù)名的意義
7.5.3 引用語義
7.6 習慣用法
7.6.1 干凈與強迫癥
7.6.2 comma,ok表達式
7.6.3 簡寫模式
7.6.4 包中的函數(shù)或方法設(shè)計
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章 編程哲學
9.1 Go語言設(shè)計哲學
9.1.1 少即是多
9.1.2 世界是并行的
9.1.3 組合優(yōu)于繼承
9.1.4 非侵入式的接口
9.1.5 總結(jié)
9.2 Go語言發(fā)展史
9.2.1 站在巨人的肩膀上
9.2.2 里程碑
9.3 未來
9.3.1 爭議
9.3.2 Go 2