作者簡介
樊虹劍,15歲迷上AppleII,立志成為程式設計師。從ApplesoftBASIC,到MicrosoftC、C++、C#,再到AppleObjective-C,其間使用過大小十幾種程式語言,始終不得要領。不明白起源於數學和電子學的計算機科學,為何不去追求詩歌般至簡至純的美學,而是糾結於繁複的形式和空洞的哲學。幾欲放棄。直到偶然發現Plan9,才獲得返璞歸真的樂趣,並一路歡喜走過Inferno,快樂走入Go語言的世界。
內容簡介
Go語言是由谷歌的Rob Pike、Ken Thompson和Robert Griesemer共同設計開發的一種新型程式設計語言。2012年Go l的推出,代表著Go語言的穩定成熟,也正式宣告Go走人了主流語言的行列。《Go語言鄠動力》是Go語言程式設計入門書,介紹了Go語言的基礎知識,包括靜態類型、流程控制、函式、動態類型、面向對象、並發編程等內容,以及同其他C類語言相比,Go所具備的全新特性。同時,《Go語言鄠動力》還介紹了Go語言在雲計算中的套用。
雲計算時代,對程式語言的要求也越來越高,而現有程式語言都無法滿足大規模網路套用的需求,更無法同時滿足程式設計師高效編譯、高效執行和輕鬆編程的要求。2007年,Go語言應運而生。它面向Web和多核計算,強調速度,並引入了高效、低延遲的垃圾回收算法,同時精簡了類型,摒棄了危險的指針運算。所有這些特點,都使得Go既容易學習,也便使用,無論是要解決手邊的小問題,還是要集體完成大項目,Go都是合適的通用語言。
本書作者是將Go語言在國內傳播的第一人,對Go的編譯器、運行器和各種包有深入研究,目前已正式成為Go語言的Contributor。本書是他這幾年研究心血之結晶,旨在為讀者了解Go語言、掌握Go語言提供專業的入門指導。
書中內容共分為9章,全面介紹了Go語言的基礎知識,以及Go語言在雲計算中的套用。作者還提供了70多個完整的示例程式,方便讀者邊學邊練,加深記憶。通過輕鬆簡潔的介紹,讀者定能順利進入Go語言的世界。
書籍目錄
第1章 快速入門 1
1.1 編輯和編譯 2
1.2 世界,你好! 9
1.3 自我複製 11
1.4 猜數遊戲 14
1.5 圖靈機 19
1.6 排版工具 23
1.7 遊樂場 30
1.8 位錢 36
1.9 小結 43
第2章 靜態類型 44
2.1 數制 45
2.1.1 整數 45
2.1.2 二進制補碼 46
2.1.3 整數比較 47
2.1.4 按位運算 48
2.1.5 浮點數 50
2.1.6 複數 51
2.1.7 優先權 52
2.1.8 表達式 53
2.2 字元和字元串 54
2.2.1 UTF-8編碼 54
2.2.2 Unicode字元 55
2.2.3 轉義字元 56
2.2.4 字元串 56
2.2.5 字元串轉換 57
2.3 數組 60
2.3.1 聲明 60
2.3.2 下標 61
2.3.3 賦值 61
2.4 切片 63
2.5 結構體 67
2.5.1 項 68
2.5.2 內置 69
2.6 指針 71
2.7 小結 73
第3章 流程控制 74
3.1 簡單語句 75
3.2 判斷語句if 77
3.3 多分支語句switch 79
3.4 循環語句for 82
3.5 遍歷 84
3.6 標號和跳轉 85
3.7 作用域 86
3.8 小結 88
第4章 函式 89
4.1 簽名 90
4.2 參數 91
4.3 返回語句 93
4.4 函式調用 95
4.5 閉包 97
4.6 壓後 99
4.7 派錯和恢復 100
4.8 方法 102
4.9 包 105
4.10 導入 107
4.11 程式初始化 108
4.12 小結 110
第5章 動態類型 111
5.1 映射 112
5.2 界面類型 116
5.3 界面值 119
5.4 error界面 122
5.5 有界無類 124
5.6 排序 126
5.7 類型斷言 130
5.8 類型分支 133
5.9 反射 135
5.10 小結 141
第6章 面向對象 142
6.1 背景 143
6.2 術語 146
6.3 與C++對比 149
6.3.1 繼承 149
6.3.2 抽象類 151
6.3.3 泛型 153
6.4 小結 154
第7章 並發編程 155
7.1 背景 156
7.2 同步通信 158
7.3 去程 162
7.4 程道 164
7.5 遍歷與關閉 166
7.6 MapReduce 168
7.7 select語句 170
7.8 程道值 173
7.9 互斥 175
7.10 小結 177
第8章 雲計算 178
8.1 背景 179
8.2 GAE 181
8.3 Hello 世界! 183
8.4 畫鬍子 185
8.5 留言錄 191
8.6 用戶API 195
8.7 資料庫API 196
8.7.1 術語 197
8.7.2 Go資料庫API 197
8.7.3 實體鍵 199
8.7.4 查詢和索引 200
8.7.5 實體組 201
8.7.6 限制 201
8.8 交易 203
8.9 散段 205
8.10 記憶體緩衝 208
8.11 大件庫 210
8.12 URL抓取 213
8.13 任務佇列 214
8.13.1 任務 216
8.13.2 任務執行 217
8.13.3 佇列 218
8.14 後端 220
8.15 能力API 221
8.16 電子郵件API 222
8.16.1 傳送 222
8.16.2 接收 223
8.17 信道API 224
8.18 小結 226
第9章 標準包 227
9.1 格式包 228
9.1.1 格式輸出Printf 229
9.1.2 動詞表 230
9.1.3 寬度和精度 231
9.1.4 報錯 232
9.1.5 額外標記 232
9.1.6 格式輸入 233
9.1.7 字元串格式 234
9.2 位元組包 236
9.3 模板包 239
9.4 正則表達式包 245
9.5 時間包 253
9.6 超連結包 258
9.6.1 http伺服器和客戶機 258
9.6.2 https加密通信 260
9.6.3 Get 263
9.6.4 Post 265
9.6.5 Cookie 268
9.7 編碼包 271
9.7.1 gob 271
9.7.2 json 275
附錄A Go的安裝和使用 277
附錄B EBNF 284
附錄C 中英術語對照表 291
書籍前言
從1978年《C程式設計語言》問世到現在,計算機世界已經發生了翻天覆地的變化。計算機器本身的性能已經得到幾千倍的提高,計算機的互聯互通更使很多不可思議的事情成為常態。身為計算機靈魂的工程師,程式設計師一直處在這場變革的風口浪尖。他們既有弄潮兒的自信與灑脫,又時刻面臨被後浪吞噬的危險。更微妙的是,儘管計算機科學的先驅們很早就發現,編程是門文字和思維的藝術,而且頂尖程式設計師的生產力要遠大於集體化大規模生產作業中的員工。但是,由於整個計算機產業的迅速發展,以及具備藝術細胞的程式設計師的稀缺,從業者只能重點投資工具和流程。自從20世紀60年代提出“軟體危機”這一問題以來,各種理論和實踐不斷湧現,而通過變革程式語言來解決問題的努力,也一直在繼續。但到目前為止,軟體還在危機,同志仍需努力。
C.A.R Hoare 在1980年圖靈獎獲獎致辭中闡述得很精闢:
“設計軟體有兩種方式:第一種是儘量簡化,使之明顯地看不到弱點;另一種是儘量複雜,從而看不到明顯的弱點。第一種方式非常困難。就像發現複雜的自然現象之中蘊含著簡單的物理定律一樣,它需要投入、明察、甚至靈感。”
今天,我非常高興地向大家介紹Go語言。40年前,C程式語言極大地解放了程式設計師的生產力。今天,新興的Go語言也一定能夠再次提升程式設計師的創造力和協作能力,從而讓有才能的程式設計師得以在創作中充分發揮,讓程式設計師重新成為令人尊敬的計算機靈魂的工程師。
目前,Go語言才發布了短短几年時間,就已經贏得了廣泛讚譽,並得到了廣泛套用。它不但用於支持谷歌和Heroku的雲計算平台,還在一些大公司的內部系統中擔當關鍵角色,甚至普通程式設計師也用Go代替其他常見語言來處理手邊的問題。這充分說明Go是一種成熟、實用、好用的語言。它的未來非常光明。
本書所介紹的內容正是使用Go語言時必不可少的基礎知識。作者不滿足於平鋪直敘的方式,而希望能通過輕鬆的表達,讓Go自然而然地接近讀者,並以作者自身的經驗和觀點,啟發讀者獨立地分析和試驗,從而讓讀者能順利地從入門到精通,讓Go成為最好的程式語言。