內容介紹
這本書從整體的寫作風格來說,會以介紹 Go 語言特性為主,示例則儘量採用作者平常的實踐,而不是一個沒有太大實際意義的語法示範樣例。
本書作者背景極強,許式偉為原金山WPS首席架構師、曾是盛大創新院研究員,目前是國內Go語言實踐圈子公認的Go語言專家。參與本書寫作的幾位作者都是實際用Go語言開發的項目的開發人員,有較強的實戰經驗。
這本書面向的讀者是所有打算用Go語言的開發者,主要包括目前使用C、C++、Java、C#的開發人員,甚至一些Python、PHP開發人員也可能轉為 Go 程式設計師。
作者介紹
許式偉
七牛雲存儲CEO,曾任盛大創新院資深研究員、金山軟體技術總監、WPS Office 2005首席架構師。開源愛好者,發布過包括WINX、TPL等十餘個C++開源項目,擁有超過15年的C/C++開發經驗。在接觸Go語言後即可被其大道至簡、少即是多的設計哲學所傾倒。七牛雲存儲是國內第一個吃螃蟹的團隊,核心服務完全採用Go語言實現。
呂桂華
七牛雲存儲聯合創始人,曾在金山軟體、盛大遊戲等公司擔任架構師和部門經理等職務,在企業級系統和大型網遊平台領域有較多涉獵。擁有十餘年的C/C++大型項目開發經驗,也曾在Java和.NET平台上探索多年。同樣被Go語言的魅力所吸引而不可自拔,希望能為推廣這門優秀的語言儘自己的綿薄之力。
作品目錄
第1 章 初識Go 語言........................................ 1
1.1 語言簡史...................................................... 1
1.2 語言特性...................................................... 2
1.2.1 自動垃圾回收................................... 3
1.2.2 更豐富的內置類型........................... 4
1.2.3 函式多返回值................................... 5
1.2.4 錯誤處理.......................................... 6
1.2.5 匿名函式和閉包............................... 6
1.2.6 類型和接口...................................... 7
1.2.7 並發編程.......................................... 8
1.2.8 反射.................................................. 9
1.2.9 語言互動性.................................... 10
1.3 第一個Go 程式.......................................... 11
1.3.1 代碼解讀........................................ 11
1.3.2 編譯環境準備................................. 12
1.3.3 編譯程式........................................ 12
1.4 開發工具選擇............................................ 13
1.5 工程管理.................................................... 13
1.6 問題追蹤和調試......................................... 18
1.6.1 列印日誌........................................ 18
1.6.2 GDB 調試....................................... 18
1.7 如何尋求幫助............................................ 18
1.7.1 郵件列表........................................ 19
1.7.2 網站資源........................................ 19
1.8 小結............................................................ 19
第2 章 順序編程.............................................. 20
2.1 變數............................................................ 20
2.1.1 變數聲明........................................ 20
2.1.2 變數初始化.................................... 21
2.1.3 變數賦值........................................ 21
2.1.4 匿名變數........................................ 22
2.2 常量............................................................ 22
2.2.1 字面常量........................................ 22
2.2.2 常量定義........................................ 23
2.2.3 預定義常量.................................... 23
2.2.4 枚舉................................................ 24
2.3 類型............................................................ 24
2.3.1 布爾類型........................................ 25
2.3.2 整型................................................ 25
2.3.3 浮點型............................................ 27
2.3.4 複數類型........................................ 28
2.3.5 字元串............................................ 28
2.3.6 字元類型........................................ 30
2.3.7 數組................................................ 31
2.3.8 數組切片........................................ 32
2.3.9 map ................................................. 36
2.4 流程控制.................................................... 38
2.4.1 條件語句........................................ 38
2.4.2 選擇語句........................................ 39
2.4.3 循環語句........................................ 40
2.4.4 跳轉語句........................................ 41
2.5 函式............................................................ 41
2.5.1 函式定義........................................ 42
2.5.2 函式調用........................................ 42
2.5.3 不定參數........................................ 43
2.5.4 多返回值........................................ 45
2.5.5 匿名函式與閉包............................. 45
2.6 錯誤處理.................................................... 47
2.6.1 error 接口.................................... 47
2.6.2 defer............................................. 48
2.6.3 panic()和recover() ............... 49
2.7 完整示例.................................................... 50
2.7.1 程式結構........................................ 51
2.7.2 主程式............................................ 51
2.7.3 算法實現........................................ 54
2.7.4 主程式............................................ 57
2.7.5 構建與執行.................................... 59
2.8 小結............................................................ 61
第3 章 面向對象編程..................................... 62
3.1 類型系統.................................................... 62
3.1.1 為類型添加方法............................. 63
3.1.2 值語義和引用語義......................... 66
3.1.3 結構體............................................ 67
3.2 初始化........................................................ 68
3.3 匿名組合.................................................... 68
3.4 可見性........................................................ 71
3.5 接口............................................................ 71
3.5.1 其他語言的接口............................. 71
3.5.2 非侵入式接口................................ 73
3.5.3 接口賦值........................................ 74
3.5.4 接口查詢........................................ 76
3.5.5 類型查詢........................................ 78
3.5.6 接口組合........................................ 78
3.5.7 Any 類型........................................ 79
3.6 完整示例.................................................... 79
3.6.1 音樂庫............................................ 80
3.6.2 音樂播放........................................ 82
3.6.3 主程式............................................ 84
3.6.4 構建運行........................................ 86
3.6.5 遺留問題........................................ 86
3.7 小結............................................................ 87
第4 章 並發編程.............................................. 88
4.1 並發基礎.................................................... 88
4.2 協程............................................................ 90
4.3 goroutine ..................................................... 90
4.4 並發通信.................................................... 91
4.5 channel........................................................ 94
4.5.1 基本語法........................................ 95
4.5.2 select........................................... 95
4.5.3 緩衝機制........................................ 96
4.5.4 逾時機制........................................ 97
4.5.5 channel 的傳遞............................... 98
4.5.6 單向channel ................................... 98
4.5.7 關閉channel ................................... 99
4.6 多核並行化.............................................. 100
4.7 出讓時間片.............................................. 101
4.8 同步.......................................................... 101
4.8.1 同步鎖.......................................... 101
4.8.2 全局唯一性操作........................... 102
4.9 完整示例.................................................. 103
4.9.1 簡單IPC 框架.............................. 105
4.9.2 中央伺服器.................................. 108
4.9.3 主程式.......................................... 113
4.9.4 運行程式...................................... 116
4.10 小結........................................................ 117
第5 章 網路編程............................................ 118
5.1 Socket 編程............................................... 118
5.1.1 Dial()函式................................. 118
5.1.2 ICMP 示例程式............................ 119
5.1.3 TCP 示例程式.............................. 121
5.1.4 更豐富的網路通信....................... 122
5.2 HTTP 編程................................................ 124
5.2.1 HTTP 客戶端................................ 124
5.2.2 HTTP 服務端................................ 130
5.3 RPC 編程.................................................. 132
5.3.1 Go 語言中的RPC 支持與處理.............................................. 132
5.3.2 Gob 簡介....................................... 134
5.3.3 設計優雅的RPC 接口................. 134
5.4 JSON 處理................................................ 135
5.4.1 編碼為JSON 格式....................... 136
5.4.2 解碼JSON 數據........................... 137
5.4.3 解碼未知結構的JSON 數據....... 138
5.4.4 JSON 的流式讀寫........................ 140
5.5 網站開發.................................................. 140
5.5.1 最簡單的網站程式....................... 141
5.5.2 net/http 包簡介....................... 141
5.5.3 開發一個簡單的相冊網站........... 142
5.6 小結.......................................................... 157
第6 章 安全編程............................................ 158
6.1 數據加密.................................................. 158
6.2 數字簽名.................................................. 158
6.3 數字證書.................................................. 159
6.4 PKI 體系................................................... 159
6.5 Go 語言的哈希函式................................. 159
6.6 加密通信.................................................. 160
6.6.1 加密通信流程............................... 161
6.6.2 支持HTTPS 的Web 伺服器....... 162
6.6.3 支持HTTPS 的檔案伺服器......... 165
6.6.4 基於SSL/TLS 的ECHO 程式..... 166
6.7 小結.......................................................... 169
第7 章 工程管理............................................ 170
7.1 Go 命令行工具......................................... 170
7.2 代碼風格.................................................. 172
7.2.1 強制性編碼規範........................... 172
7.2.2 非強制性編碼風格建議............... 173
7.3 遠程import 支持................................... 175
7.4 工程組織.................................................. 175
7.4.1 GOPATH......................................... 176
7.4.2 目錄結構...................................... 176
7.5 文檔管理.................................................. 177
7.6 工程構建.................................................. 180
7.7 跨平台開發.............................................. 180
7.7.1 交叉編譯...................................... 181
7.7.2 Android 支持................................ 182
7.8 單元測試.................................................. 183
7.9 打包分發.................................................. 184
7.10 小結........................................................ 184
第8 章 開發工具............................................ 186
8.1 選擇開發工具.......................................... 186
8.2 gedit .......................................................... 187
8.2.1 語法高亮...................................... 187
8.2.2 編譯環境...................................... 187
8.3 Vim........................................................... 188
8.4 Eclipse ...................................................... 189
8.5 Notepad++ ................................................ 192
8.5.1 語法高亮...................................... 192
8.5.2 編譯環境...................................... 192
8.6 LiteIDE ..................................................... 193
8.7 小結.......................................................... 195
第9 章 進階話題............................................ 196
9.1 反射.......................................................... 196
9.1.1 基本概念...................................... 196
9.1.2 基本用法...................................... 197
9.1.3 對結構的反射操作....................... 199
9.2 語言互動性.............................................. 199
9.2.1 類型映射...................................... 200
9.2.2 字元串映射.................................. 201
9.2.3 C 程式........................................... 201
9.2.4 函式調用...................................... 202
9.2.5 編譯Cgo....................................... 203
9.3 連結符號.................................................. 203
9.4 goroutine 機理.......................................... 204
9.4.1 協程.............................................. 204
9.4.2 協程的C 語言實現...................... 205
9.4.3 協程庫概述.................................. 205
9.4.4 任務.............................................. 208
9.4.5 任務調度...................................... 210
9.4.6 上下文切換.................................. 211
9.4.7 通信機制...................................... 215
9.5 接口機理.................................................. 216
9.5.1 類型賦值給接口........................... 217
9.5.2 接口查詢...................................... 223
9.5.3 接口賦值...................................... 224
附錄A................................................................... 225