如果您正在找一本關於Go語言的入門書,我只推薦您這本

Go作為一門廣受關注的熱門語言,在市場上從來不缺少相關的書,特別是面向初學者的書。然而,跟市面上很多聲稱是入門書卻只會一股腦兒地將各種語言細節硬塞給讀者的“偽入門書”不一樣,本書是一本真正面向初學者的書。整本書的學習曲線非常平緩,不會像過山車那樣忽高忽低。書中的內容首先從變量、循環、分支、類型等基礎知識開始,逐漸進階至函數、方法、收集器和結構,最後再深入到指針、錯誤處理和併發等高級特性。只要翻開本書一頁頁讀下去,你就會循序漸進地學到越來越多Go語言的知識,並且逐步掌握Go語言的眾多特性。

除上面提到的優點之外,本書還是一本非常有趣的書。作者在書中列舉了大量跟天文以及航天有關的例子,讀者不僅要計算從地球乘坐宇宙飛船航行至火星所需的天數,還要在火星上放置探測器以便查找生命存在的痕跡,甚至還要想辦法改造火星,使它能夠適宜人類居住。值得一提的是,書中很多地方都帶有可愛的地鼠(gopher)插圖,它們就像旅行途中優美的景色一樣,將為我們的學習旅途增添大量的樂趣。

總而言之,這是一本既有趣又實用的Go語言入門書。如果你只想讀一本關於Go語言的入門書,那麼我強烈推薦你讀這一本。

如果您正在找一本關於Go語言的入門書,我只推薦您這本

遺憾的是,很多學習Go語言的資源都假設讀者擁有C語言的工作經驗,而本書的目的則在於彌補這一缺陷,為腳本使用者、業餘愛好者和初學者提供一條學習Go語言的康莊大道。為了讓起步的過程變得更容易一些,本書的所有代碼清單和練習都可以在Go Playground裡面執行,你在閱讀本書的時候甚至不需要安裝任何東西。

如果你曾經使用過諸如JavaScript、Lua、PHP、Perl、Python或者Ruby這樣的腳本語言,那麼你已經做好了學習Go的萬全準備。如果你曾經使用過Scratch或者Excel的公式,或者編寫過HTML,那麼你毫無疑問可以像Audrey Lim在她的演講“A Beginner’s Mind”(初學者之心)中所說的一樣,選擇Go作為你的第一門“真正”的編程語言。雖然掌握Go語言並不是一件容易的事情,需要相應的耐心和努力,但我們希望本書在這個過程中能夠助你一臂之力。

內容提要

本書是一本面向Go語言初學者的書,循序漸進地介紹了使用Go語言所必需的知識,展示了非常多生動有趣的例子,並通過提供大量練習來加深讀者對書中所述內容的理解。本書共分8個單元,分別介紹變量、常量、分支和循環等基礎語句,整數、浮點數和字符串等常用類型,類型、函數和方法,數組、切片和映射,結構和接口,指針、nil和錯誤處理方法,併發和狀態保護,並且每個單元都包含相應的章節和單元測試。

本書適合對初學Go語言有不同需求的程序員閱讀。無論是剛開始學習Go語言的新手,還是想要回顧Go語言基礎知識的Go語言使用者,只要是想用Go做開發,無論是開發小型腳本還是大型程序,本書都會非常有幫助。

作者簡介

如果您正在找一本關於Go語言的入門書,我只推薦您這本

NATHAN YOUNGMAN (內森·揚曼)既是一位自學成才的網絡開發者,也是終生學習概念的一位踐行者。 他是加拿大埃德蒙頓市 Go 聚會的組織者,Canada Learning Code 機構的導師以及地鼠玩偶的狂熱攝影愛好者。

如果您正在找一本關於Go語言的入門書,我只推薦您這本

ROGER PEPPÉ (羅傑·佩珀)是一位 Go 貢獻者,他維護著一系列開源 Go 項目,運營著英國紐卡斯爾市的 Go 聚會,並且當前正在擔任 Go 雲端基礎設施軟件的相關工作。

目錄結構

第0單元 入門
第 1章 各就各位,預備,Go! 3
1.1 什麼是Go 4
1.2 Go Playground 6
1.3 包和函數 7
1.4 唯一允許的大括號放置風格 8
1.5 小結 9
實驗:playground.go 10
第 1單元 命令式編程
第 2章 被美化的計算器 13
2.1 執行計算 13
2.2 格式化輸出 15
2.3 常量和變量 16
2.4 走捷徑 18
2.4.1 一次聲明多個變量 18
2.4.2 增量並賦值操作符 18
2.5 數字遊戲 19
2.6 小結 20
實驗:malacandra.go 21
第3章 循環和分支 22
3.1 真或假 23
3.2 比較 24
3.3 使用if實現分支判斷 25
3.4 邏輯運算符 26
3.5 使用switch實現分支判斷 28
3.6 使用循環實現重複執行 30
3.7 小結 31
實驗:guess.go 32
第4章 變量作用域 33
4.1 審視作用域 34
4.2 簡短聲明 35
4.3 作用域的範圍 37
4.4 小結 39


實驗:random-dates.go 39
第5章 單元實驗:前往火星的航行票 40
第 2單元 類型
第6章 實數 45
6.1 聲明浮點類型變量 46
6.1.1 單精度浮點數 47
6.1.2 零值 47
6.2 打印浮點類型 48
6.3 浮點精確性 49
6.4 比較浮點數 51
6.5 小結 51
實驗:piggy.go 52
第7章 整數 53
7.1 聲明整數類型變量 54
7.1.1 為不同場合而設的整數類型 54
7.1.2 瞭解類型 56
7.2 為8位顏色使用uint8類型 56
7.3 整數迴繞 58
7.3.1 聚焦二進制位 58
7.3.2 避免時間迴繞 60
7.4 小結 61
實驗:piggy.go 62
第8章 大數 63
8.1 擊中天花板 63
8.2 big包 65
8.3 大小非同尋常的常量 66
8.4 小結 68
實驗:cains.go 68
第9章 多語言文本 69
9.1 聲明字符串變量 70
9.2 字符、代碼點、符文和字節 71
9.3 拉弦 73
9.4 使用凱撒加密法處理字符 73

9.5 將字符串解碼為符文 76
9.6 小結 77
實驗:caesar.go 78
實驗:international.go 78
第 10章 類型轉換 79
10.1 類型不能混合使用 79
10.2 數字類型轉換 81
10.3 類型轉換的危險之處 82
10.4 字符串轉換 83
10.5 轉換布爾值 85
10.6 小結 86
實驗:input.go 86
第 11章 單元實驗:維吉尼亞加密法 87
實驗:decipher.go 88
實驗:cipher.go 89
第3單元 構建塊
第 12章 函數 93
12.1 函數聲明 94
12.2 編寫函數 97
12.3 小結 99
實驗:functions.go 99
第 13章 方法 100
13.1 聲明新類型 101
13.2 引入自定義類型 102
13.3 通過方法為類型添加行為 103
13.4 小結 105
實驗:methods.go 106
第 14章 一等函數 107
14.1 將函數賦值給變量 108
14.2 將函數傳遞給其他函數 109
14.3 聲明函數類型 110
14.4 閉包和匿名函數 111
14.5 小結 113

實驗:calibrate.go 114
第 15章 單元實驗:溫度表 115
第4單元 收集器
第 16章 勞苦功高的數組 119
16.1 聲明數組並訪問其元素 119
16.2 小心越界 121
16.3 使用複合字面量初始化數組 121
16.4 迭代數組 122
16.5 數組被複制 123
16.6 由數組組成的數組 125
16.7 小結 125
實驗:chess.go 126
第 17章 切片:指向數組的窗口 127
17.1 切分數組 128
17.2 切片的複合字面量 130
17.3 切片的威力 130
17.4 帶有方法的切片 132
17.5 小結 133
實驗:terraform.go 133
第 18章 更大的切片 134
18.1 append函數 134
18.2 長度和容量 135
18.3 詳解append函數 136
18.4 三索引切分操作 137
18.5 使用make函數對切片實行預分配 138
18.6 聲明可變參數函數 139
18.7 小結 140
實驗:capacity.go 140
第 19章 無所不能的映射 141
19.1 聲明映射 142
19.2 映射不會被複制 143
19.3 使用make函數對映射實行預分配 144

19.4 使用映射進行計數 145
19.5 使用映射和切片實現數據分組 146
19.6 將映射用作集合 147
19.7 小結 148
實驗:words.go 148
第 20章 單元實驗:切片人生 150
20.1 開天闢地 150
20.1.1 觀察世界 151
20.1.2 激活細胞 151
20.2 適者生存 152
20.2.1 存活還是死亡 152
20.2.2 統計鄰近細胞 152
20.2.3 遊戲邏輯 153
20.3 平行世界 153
第5單元 狀態與行為
第 21章 結構 157
21.1 聲明結構 157
21.2 通過類型複用結構 159
21.3 通過複合字面量初始化結構 159
21.4 結構被複制 161
21.5 由結構組成的切片 161
21.6 將結構編碼為JSON 162
21.7 使用結構標籤定製JSON 164
21.8 小結 165
實驗:landing.go 165
第 22章 Go沒有類 166
22.1 將方法綁定到結構 166
22.2 構造函數 168
22.3 類的替代品 169
22.4 小結 171
實驗:landing.go 171
實驗:distance.go 171
第 23章 組合與轉發 173

23.1 合併結構 174
23.2 實現自動的轉發方法 176
23.3 命名衝突 178
23.4 小結 180
實驗:gps.go 180
第 24章 接口 181
24.1 接口類型 182
24.2 探索接口 185
24.3 滿足接口 187
24.4 小結 189
實驗:marshal.go 189
第 25章 單元實驗:火星上的動物避難所 190
第6單元 深入Go語言
第 26章 關於指針的二三事 195
26.1 &和* 196
26.2 指針的作用就是指向 199
26.2.1 指向結構的指針 201
26.2.2 指向數組的指針 202
26.3 實現修改 203
26.3.1 將指針用作形參 203
26.3.2 指針接收者 204
26.3.3 內部指針 206
26.3.4 修改數組 207
26.4 隱式指針 208
26.4.1 映射也是指針 208
26.4.2 切片指向數組 208
26.5 指針和接口 209
26.6 明智地使用指針 210
26.7 小結 211
實驗:turtle.go 211
第 27章 關於nil的紛紛擾擾 212
27.1 通向驚恐的nil指針 213
27.2 保護你的方法 214

27.3 nil函數值 216
27.4 nil切片 217
27.5 nil映射 218
27.6 nil接口 218
27.7 nil之外的另一個選擇 219
27.8 小結 220
實驗:knights.go 221
第 28章 孰能無過 222
28.1 處理錯誤 223
28.2 優雅的錯誤處理 224
28.2.1 文件寫入 225
28.2.2 關鍵字defer 227
28.2.3 創造性的錯誤處理 228
28.3 新的錯誤 229
28.3.1 按需返回錯誤 231
28.3.2 自定義錯誤類型 232
28.4 不要驚恐 235
28.4.1 其他語言中的異常 235
28.4.2 如何引發驚恐 236
28.4.3 處理驚恐 237
28.5 小結 237
實驗:url.go 238
第 29章 單元實驗:數獨規則 239
第7單元 併發編程
第30章 goroutine和併發 243
30.1 啟動goroutine 244
30.2 不止一個goroutine 245
30.3 通道 247
30.4 使用select處理多個通道 249
30.5 阻塞和死鎖 251
30.6 地鼠裝配線 252
30.7 小結 256
實驗:remove-identical.go 256
實驗:split-words.go 256
第31章 併發狀態 257

31.1 互斥鎖 258
31.2 長時間運行的工作進程 262
31.3 小結 267
實驗:positionworker.go 268
實驗:rover.go 268
第32章 單元實驗:尋找火星生命 269
32.1 可供活動的網格 269
32.2 報告發現 270
結語:何去何從 273
習題答案(網上下載)

未覆蓋內容

Go是一門相對小型的語言,你已經學習了它的大部分知識,但還有一些知識是本書沒有涉及的。

  • 沒有介紹使用方便的iota標識符來聲明連續的常量。
  • 沒有介紹移位操作符(<>)和位運算操作符(&和|)。
  • 第3章介紹了循環,但沒有介紹關鍵字continue並且跳過了關鍵字goto和標籤。
  • 第4章介紹了作用域但沒有說明遮蔽變量的具體規則。
  • 第6章至第8章介紹了浮點數、整數和大數字,但沒有介紹複數和虛數。
  • 第12章介紹了關鍵字return,但沒有介紹裸返回(bare return)。
  • 第12章介紹了空接口interface{},但只是淺嘗即止。
  • 第13章介紹了方法但沒有介紹方法值。
  • 第28章介紹了類型斷言但沒有介紹類型判斷。
  • 第30章沒有介紹雙向通道。
  • 沒有介紹執行初始化操作的init函數,它和main函數一樣都是特殊函數。
  • 沒有詳細地介紹每個內置函數,例如,分配內存並返回指針的new函數和複製切片的copy函數(詳見Go官方標準庫網站)。
  • 沒有演示通過編寫新包來組織代碼,也沒有說明如何將自己的包分享給別人。

最後分享幾張書內萌圖,你也可以給他們配上一句文字。祝您閱讀愉快!

如果您正在找一本關於Go語言的入門書,我只推薦您這本

如果您正在找一本關於Go語言的入門書,我只推薦您這本

如果您正在找一本關於Go語言的入門書,我只推薦您這本

如果您正在找一本關於Go語言的入門書,我只推薦您這本


分享到:


相關文章: