《Go語言趣學(xué)指南》是一本面向Go語言初學(xué)者的書,循序漸進(jìn)地介紹了使用Go語言所必需的知識,展示了非常多生動有趣的例子,并通過提供大量練習(xí)來加深讀者對書中所述內(nèi)容的理解。本書共分8個單元,分別介紹變量、常量、分支和循環(huán)等基礎(chǔ)語句,整數(shù)、浮點數(shù)和字符串等常用類型,類型、函數(shù)和方法,數(shù)組、切片和映射,結(jié)構(gòu)和接口,指針、nil和錯誤處理方法,并發(fā)和狀態(tài)保護(hù),并且每個單元都包含相應(yīng)的章節(jié)和單元測試。
《Go語言趣學(xué)指南》適合對初學(xué)Go語言有不同需求的程序員閱讀。無論是剛開始學(xué)習(xí)Go語言的新手,還是想要回顧Go語言基礎(chǔ)知識的Go語言使用者,只要是想用Go做開發(fā),無論是開發(fā)小型腳本還是大型程序,《Go語言趣學(xué)指南》都會非常有幫助。
Go是谷歌公司為了解決重大問題而設(shè)計的一種小型編程語言。完成大型項目需要大型團(tuán)隊,而大型團(tuán)隊中團(tuán)隊成員的經(jīng)驗水平往往各不相同。Go是一種小巧卻功能強大的語言,它能夠被任何人理解和使用,無論其經(jīng)驗如何。
快速、現(xiàn)代的編程語言能讓業(yè)余愛好者、初學(xué)者和專業(yè)人員都受益。你需要的正是這樣的語言。本書針對Go語言基礎(chǔ)知識提供了實操性的指導(dǎo),使你能夠掌握Go語法,使用類型和函數(shù),探索狀態(tài)和并發(fā)等更重要的概念,并通過大量練習(xí)來鞏固學(xué)到的知識。
本書包括以下內(nèi)容:
●切片、接口、指針和并發(fā)等重要語言概念;
●地鼠太空航行、火星探測器、文本加密以及人類繁衍模擬等7個單元實驗;
●無須安裝即可在Go Playground中運行的示例。
本書面向所有熟悉計算機編程以及渴望獲得這一技能的人。
內(nèi)森·揚曼(Nathan Youngman)既是一位自學(xué)成才的網(wǎng)絡(luò)開發(fā)者,也是一位終生學(xué)習(xí)概念的踐行者。他是加拿大埃德蒙頓市Go聚會的組織者、Canada Learning Code的輔導(dǎo)教師以及狂熱的地鼠玩偶攝影愛好者。
羅杰·佩珀(Roger Peppé)是一位Go貢獻(xiàn)者,他維護(hù)著一系列開源Go項目,負(fù)責(zé)組織英國紐卡斯?fàn)柺械腉o聚會,并且當(dāng)前正在承擔(dān)Go云端基礎(chǔ)設(shè)施軟件的相關(guān)工作。
目 錄
第0單元 入門
第 1章 各就各位,預(yù)備,Go! 3
1.1 什么是Go 4
1.2 Go Playground 6
1.3 包和函數(shù) 7
1.4 唯一允許的大括號放置風(fēng)格 8
1.5 小結(jié) 9
實驗:playground.go 10
第 1單元 命令式編程
第 2章 被美化的計算器 13
2.1 執(zhí)行計算 13
2.2 格式化輸出 15
2.3 常量和變量 16
2.4 走捷徑 18
2.4.1 一次聲明多個變量 18
2.4.2 增量并賦值操作符 18
2.5 數(shù)字游戲 19
2.6 小結(jié) 20
實驗:malacandra.go 21
第3章 循環(huán)和分支 22
3.1 真或假 23
3.2 比較 24
3.3 使用if實現(xiàn)分支判斷 25
3.4 邏輯運算符 26
3.5 使用switch實現(xiàn)分支判斷 28
3.6 使用循環(huán)實現(xiàn)重復(fù)執(zhí)行 30
3.7 小結(jié) 31
實驗:guess.go 32
第4章 變量作用域 33
4.1 審視作用域 34
4.2 簡短聲明 35
4.3 作用域的范圍 37
4.4 小結(jié) 39
實驗:random-dates.go 39
第5章 單元實驗:前往火星的航行票 40
第 2單元 類型
第6章 實數(shù) 45
6.1 聲明浮點類型變量 46
6.1.1 單精度浮點數(shù) 47
6.1.2 零值 47
6.2 打印浮點類型 48
6.3 浮點精確性 49
6.4 比較浮點數(shù) 51
6.5 小結(jié) 51
實驗:piggy.go 52
第7章 整數(shù) 53
7.1 聲明整數(shù)類型變量 54
7.1.1 為不同場合而設(shè)的整數(shù)類型 54
7.1.2 了解類型 56
7.2 為8位顏色使用uint8類型 56
7.3 整數(shù)回繞 58
7.3.1 聚焦二進(jìn)制位 58
7.3.2 避免時間回繞 60
7.4 小結(jié) 61
實驗:piggy.go 62
第8章 大數(shù) 63
8.1 擊中天花板 63
8.2 big包 65
8.3 大小非同尋常的常量 66
8.4 小結(jié) 68
實驗:cains.go 68
第9章 多語言文本 69
9.1 聲明字符串變量 70
9.2 字符、代碼點、符文和字節(jié) 71
9.3 拉弦 73
9.4 使用凱撒加密法處理字符 73
9.5 將字符串解碼為符文 76
9.6 小結(jié) 77
實驗:caesar.go 78
實驗:international.go 78
第 10章 類型轉(zhuǎn)換 79
10.1 類型不能混合使用 79
10.2 數(shù)字類型轉(zhuǎn)換 81
10.3 類型轉(zhuǎn)換的危險之處 82
10.4 字符串轉(zhuǎn)換 83
10.5 轉(zhuǎn)換布爾值 85
10.6 小結(jié) 86
實驗:input.go 86
第 11章 單元實驗:維吉尼亞加密法 87
實驗:decipher.go 88
實驗:cipher.go 89
第3單元 構(gòu)建塊
第 12章 函數(shù) 93
12.1 函數(shù)聲明 94
12.2 編寫函數(shù) 97
12.3 小結(jié) 99
實驗:functions.go 99
第 13章 方法 100
13.1 聲明新類型 101
13.2 引入自定義類型 102
13.3 通過方法為類型添加行為 103
13.4 小結(jié) 105
實驗:methods.go 106
第 14章 一等函數(shù) 107
14.1 將函數(shù)賦值給變量 108
14.2 將函數(shù)傳遞給其他函數(shù) 109
14.3 聲明函數(shù)類型 110
14.4 閉包和匿名函數(shù) 111
14.5 小結(jié) 113
實驗:calibrate.go 114
第 15章 單元實驗:溫度表 115
第4單元 收集器
第 16章 勞苦功高的數(shù)組 119
16.1 聲明數(shù)組并訪問其元素 119
16.2 小心越界 121
16.3 使用復(fù)合字面量初始化數(shù)組 121
16.4 迭代數(shù)組 122
16.5 數(shù)組被復(fù)制 123
16.6 由數(shù)組組成的數(shù)組 125
16.7 小結(jié) 125
實驗:chess.go 126
第 17章 切片:指向數(shù)組的窗口 127
17.1 切分?jǐn)?shù)組 128
17.2 切片的復(fù)合字面量 130
17.3 切片的威力 130
17.4 帶有方法的切片 132
17.5 小結(jié) 133
實驗:terraform.go 133
第 18章 更大的切片 134
18.1 append函數(shù) 134
18.2 長度和容量 135
18.3 詳解append函數(shù) 136
18.4 三索引切分操作 137
18.5 使用make函數(shù)對切片實行預(yù)分配 138
18.6 聲明可變參數(shù)函數(shù) 139
18.7 小結(jié) 140
實驗:capacity.go 140
第 19章 無所不能的映射 141
19.1 聲明映射 142
19.2 映射不會被復(fù)制 143
19.3 使用make函數(shù)對映射實行預(yù)分配 144
19.4 使用映射進(jìn)行計數(shù) 145
19.5 使用映射和切片實現(xiàn)數(shù)據(jù)分組 146
19.6 將映射用作集合 147
19.7 小結(jié) 148
實驗:words.go 148
第 20章 單元實驗:切片人生 150
20.1 開天辟地 150
20.1.1 觀察世界 151
20.1.2 激活細(xì)胞 151
20.2 適者生存 152
20.2.1 存活還是死亡 152
20.2.2 統(tǒng)計鄰近細(xì)胞 152
20.2.3 游戲邏輯 153
20.3 平行世界 153
第5單元 狀態(tài)與行為
第 21章 結(jié)構(gòu) 157
21.1 聲明結(jié)構(gòu) 157
21.2 通過類型復(fù)用結(jié)構(gòu) 159
21.3 通過復(fù)合字面量初始化結(jié)構(gòu) 159
21.4 結(jié)構(gòu)被復(fù)制 161
21.5 由結(jié)構(gòu)組成的切片 161
21.6 將結(jié)構(gòu)編碼為JSON 162
21.7 使用結(jié)構(gòu)標(biāo)簽定制JSON 164
21.8 小結(jié) 165
實驗:landing.go 165
第 22章 Go沒有類 166
22.1 將方法綁定到結(jié)構(gòu) 166
22.2 構(gòu)造函數(shù) 168
22.3 類的替代品 169
22.4 小結(jié) 171
實驗:landing.go 171
實驗:distance.go 171
第 23章 組合與轉(zhuǎn)發(fā) 173
23.1 合并結(jié)構(gòu) 174
23.2 實現(xiàn)自動的轉(zhuǎn)發(fā)方法 176
23.3 命名沖突 178
23.4 小結(jié) 180
實驗:gps.go 180
第 24章 接口 181
24.1 接口類型 182
24.2 探索接口 185
24.3 滿足接口 187
24.4 小結(jié) 189
實驗:marshal.go 189
第 25章 單元實驗:火星上的動物避難所 190
第6單元 深入Go語言
第 26章 關(guān)于指針的二三事 195
26.1 &和* 196
26.2 指針的作用就是指向 199
26.2.1 指向結(jié)構(gòu)的指針 201
26.2.2 指向數(shù)組的指針 202
26.3 實現(xiàn)修改 203
26.3.1 將指針用作形參 203
26.3.2 指針接收者 204
26.3.3 內(nèi)部指針 206
26.3.4 修改數(shù)組 207
26.4 隱式指針 208
26.4.1 映射也是指針 208
26.4.2 切片指向數(shù)組 208
26.5 指針和接口 209
26.6 明智地使用指針 210
26.7 小結(jié) 211
實驗:turtle.go 211
第 27章 關(guān)于nil的紛紛擾擾 212
27.1 通向驚恐的nil指針 213
27.2 保護(hù)你的方法 214
27.3 nil函數(shù)值 216
27.4 nil切片 217
27.5 nil映射 218
27.6 nil接口 218
27.7 nil之外的另一個選擇 219
27.8 小結(jié) 220
實驗:knights.go 221
第 28章 孰能無過 222
28.1 處理錯誤 223
28.2 優(yōu)雅的錯誤處理 224
28.2.1 文件寫入 225
28.2.2 關(guān)鍵字defer 227
28.2.3 創(chuàng)造性的錯誤處理 228
28.3 新的錯誤 229
28.3.1 按需返回錯誤 231
28.3.2 自定義錯誤類型 232
28.4 不要驚恐 235
28.4.1 其他語言中的異!235
28.4.2 如何引發(fā)驚恐 236
28.4.3 處理驚恐 237
28.5 小結(jié) 237
實驗:url.go 238
第 29章 單元實驗:數(shù)獨規(guī)則 239
第7單元 并發(fā)編程
第30章 goroutine和并發(fā) 243
30.1 啟動goroutine 244
30.2 不止一個goroutine 245
30.3 通道 247
30.4 使用select處理多個通道 249
30.5 阻塞和死鎖 251
30.6 地鼠裝配線 252
30.7 小結(jié) 256
實驗:remove-identical.go 256
實驗:split-words.go 256
第31章 并發(fā)狀態(tài) 257
31.1 互斥鎖 258
31.2 長時間運行的工作進(jìn)程 262
31.3 小結(jié) 267
實驗:positionworker.go 268
實驗:rover.go 268
第32章 單元實驗:尋找火星生命 269
32.1 可供活動的網(wǎng)格 269
32.2 報告發(fā)現(xiàn) 270
結(jié)語:何去何從 273
習(xí)題答案(網(wǎng)上下載)