出版時間:2012-6 出版社:人民郵電出版社 作者:[新加坡] 樊虹劍 頁數(shù):294 字?jǐn)?shù):250000
Tag標(biāo)簽:無
前言
Less is more. (舍既是得。) --Robert Browning 從1978年《C程序設(shè)計語言》問世到現(xiàn)在,計算機世界已經(jīng)發(fā)生了翻天覆地的變化。計算機器本身的性能已經(jīng)得到幾千倍的提高,計算機的互聯(lián)互通更使很多不可思議的事情成為常態(tài)。身為計算機靈魂的工程師,程序員一直處在這場變革的風(fēng)口浪尖。他們既有弄潮兒的自信與灑脫,又時刻面臨被后浪吞噬的危險。更微妙的是,盡管計算機科學(xué)的先驅(qū)們很早就發(fā)現(xiàn),編程是門文字和思維的藝術(shù),而且頂尖程序員的生產(chǎn)力要遠(yuǎn)大于集體化大規(guī)模生產(chǎn)作業(yè)中的員工。但是,由于整個計算機產(chǎn)業(yè)的迅速發(fā)展,以及具備藝術(shù)細(xì)胞的程序員的稀缺,從業(yè)者只能重點投資工具和流程。自從20世紀(jì)60年代提出“軟件危機”這一問題以來,各種理論和實踐不斷涌現(xiàn),而通過變革編程語言來解決問題的努力,也一直在繼續(xù)。但到目前為止,軟件還在危機,同志仍需努力?!? C.A.R Hoare 在1980年圖靈獎獲獎致辭中闡述得很精辟: “設(shè)計軟件有兩種方式:第一種是盡量簡化,使之明顯地看不到弱點;另一種是盡量復(fù)雜,從而看不到明顯的弱點。第一種方式非常困難。就像發(fā)現(xiàn)復(fù)雜的自然現(xiàn)象之中蘊含著簡單的物理定律一樣,它需要投入、明察、甚至靈感。” 今天,我非常高興地向大家介紹Go語言。40年前,C編程語言極大地解放了程序員的生產(chǎn)力。今天,新興的Go語言也一定能夠再次提升程序員的創(chuàng)造力和協(xié)作能力,從而讓有才能的程序員得以在創(chuàng)作中充分發(fā)揮,讓程序員重新成為令人尊敬的計算機靈魂的工程師。 目前,Go語言才發(fā)布了短短幾年時間,就已經(jīng)贏得了廣泛贊譽,并得到了廣泛應(yīng)用。它不但用于支持谷歌和Heroku的云計算平臺,還在一些大公司的內(nèi)部系統(tǒng)中擔(dān)當(dāng)關(guān)鍵角色,甚至普通程序員也用Go代替其他常見語言來處理手邊的問題。這充分說明Go是一種成熟、實用、好用的語言。它的未來非常光明?!? 本書所介紹的內(nèi)容正是使用Go語言時必不可少的基礎(chǔ)知識。作者不滿足于平鋪直敘的方式,而希望能通過輕松的表達(dá),讓Go自然而然地接近讀者,并以作者自身的經(jīng)驗和觀點,啟發(fā)讀者獨立地分析和試驗,從而讓讀者能順利地從入門到精通,讓Go成為最好的編程語言。
內(nèi)容概要
Go語言是由谷歌的Rob Pike、Ken Thompson和Robert Griesemer共同設(shè)計開發(fā)的一種新型程序設(shè)計語言。2012年Go 1的推出,代表著Go語言的穩(wěn)定成熟,也正式宣告Go走入了主流語言的行列?!禛o語言·云動力》是Go語言程序設(shè)計入門書,介紹了Go語言的基礎(chǔ)知識,包括靜態(tài)類型、流程控制、函數(shù)、動態(tài)類型、面向?qū)ο?、并發(fā)編程等內(nèi)容,以及同其他C類語言相比,Go所具備的全新特性。同時,本書還介紹了Go語言在云計算中的應(yīng)用。
《Go語言·云動力》適合Go語言初學(xué)者學(xué)習(xí)。
作者簡介
樊虹劍
15歲迷上Apple II,立志成為程序員。從Applesoft BASIC,到Microsoft C、C++、C#,再到Apple Objective-C,其間使用過大小十幾種編程語言,始終不得要領(lǐng)。不明白起源于數(shù)學(xué)和電子學(xué)的計算機科學(xué),為何不去追求詩歌般至簡至純的美學(xué),而是糾結(jié)于繁復(fù)的形式和空洞的哲學(xué)。幾欲放棄。直到偶然發(fā)現(xiàn)Plan 9,才獲得返璞歸真的樂趣,并一路歡喜走過Inferno,快樂走入Go語言的世界。
書籍目錄
目 錄
第1章 快速入門 1
1.1 編輯和編譯 2
1.2 世界,你好! 9
1.3 自我復(fù)制 11
1.4 猜數(shù)游戲 14
1.5 圖靈機 19
1.6 排版工具 23
1.7 游樂場 30
1.8 位錢 36
1.9 小結(jié) 43
第2章 靜態(tài)類型 44
2.1 數(shù)制 45
2.1.1 整數(shù) 45
2.1.2 二進(jìn)制補碼 46
2.1.3 整數(shù)比較 47
2.1.4 按位運算 48
2.1.5 浮點數(shù) 50
2.1.6 復(fù)數(shù) 51
2.1.7 優(yōu)先級 52
2.1.8 表達(dá)式 53
2.2 字符和字符串 54
2.2.1 UTF-8編碼 54
2.2.2 Unicode字符 55
2.2.3 轉(zhuǎn)義字符 56
2.2.4 字符串 56
2.2.5 字符串轉(zhuǎn)換 57
2.3 數(shù)組 60
2.3.1 聲明 60
2.3.2 下標(biāo) 61
2.3.3 賦值 61
2.4 切片 63
2.5 結(jié)構(gòu)體 67
2.5.1 項 68
2.5.2 內(nèi)置 69
2.6 指針 71
2.7 小結(jié) 73
第3章 流程控制 74
3.1 簡單語句 75
3.2 判斷語句if 77
3.3 多分支語句switch 79
3.4 循環(huán)語句for 82
3.5 遍歷 84
3.6 標(biāo)號和跳轉(zhuǎn) 85
3.7 作用域 86
3.8 小結(jié) 88
第4章 函數(shù) 89
4.1 簽名 90
4.2 參數(shù) 91
4.3 返回語句 93
4.4 函數(shù)調(diào)用 95
4.5 閉包 97
4.6 壓后 99
4.7 派錯和恢復(fù) 100
4.8 方法 102
4.9 包 105
4.10 導(dǎo)入 107
4.11 程序初始化 108
4.12 小結(jié) 110
第5章 動態(tài)類型 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 小結(jié) 141
第6章 面向?qū)ο蟆?42
6.1 背景 143
6.2 術(shù)語 146
6.3 與C++對比 149
6.3.1 繼承 149
6.3.2 抽象類 151
6.3.3 泛型 153
6.4 小結(jié) 154
第7章 并發(fā)編程 155
7.1 背景 156
7.2 同步通信 158
7.3 去程 162
7.4 程道 164
7.5 遍歷與關(guān)閉 166
7.6 MapReduce 168
7.7 select語句 170
7.8 程道值 173
7.9 互斥 175
7.10 小結(jié) 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 數(shù)據(jù)庫API 196
8.7.1 術(shù)語 197
8.7.2 Go數(shù)據(jù)庫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 內(nèi)存緩沖 208
8.11 大件庫 210
8.12 URL抓取 213
8.13 任務(wù)隊列 214
8.13.1 任務(wù) 216
8.13.2 任務(wù)執(zhí)行 217
8.13.3 隊列 218
8.14 后端 220
8.15 能力API 221
8.16 電子郵件API 222
8.16.1 發(fā)送 222
8.16.2 接收 223
8.17 信道API 224
8.18 小結(jié) 226
第9章 標(biāo)準(zhǔn)包 227
9.1 格式包 228
9.1.1 格式輸出Printf 229
9.1.2 動詞表 230
9.1.3 寬度和精度 231
9.1.4 報錯 232
9.1.5 額外標(biāo)記 232
9.1.6 格式輸入 233
9.1.7 字符串格式 234
9.2 字節(jié)包 236
9.3 模板包 239
9.4 正則表達(dá)式包 245
9.5 時間包 253
9.6 超鏈接包 258
9.6.1 http服務(wù)器和客戶機 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 中英術(shù)語對照表 291
章節(jié)摘錄
第1章 快速入門 Well begun is half done. (萬事開頭難。) --諺語 本章通過幾個具體的案例,解釋Go語言程序的基本結(jié)構(gòu),讓有一定功力的讀者迅速上手,也讓初學(xué)者對Go有個初步印象,便于后續(xù)章節(jié)的展開?!? 1.1 編輯和編譯 大家都知道,學(xué)習(xí)編程的最佳方式就是動手編程。但這里有一個巨大的障礙。動手之前你要熟悉相關(guān)的工具,知道怎樣使用編輯器,寫出源代碼。怎樣操作編譯器、鏈接器,得到可以執(zhí)行的程序。另外還要考慮怎樣運行這個程序,去哪里查看運行輸出。并且還要知道,每一個步驟如果出了錯,該怎樣應(yīng)對。 本書不打算手把手地教你使用這些必要工具。最好的辦法是請教身邊的專家。也可以參考其他資料,尤其是Go的正式發(fā)布網(wǎng)站www.golang.org,自己慢慢摸索,并在使用中不斷嘗試?!? 為了幫助初學(xué)者克服這些與語言無關(guān)的技術(shù)障礙,我們特意整合了Windows上的Acme程序編輯器和Go編譯器,并針對Go的編寫、編譯、執(zhí)行和除錯做了一個簡單演示。Go也可以運行在Linux、FreeBSD和Mac OS X上。讀者可以根據(jù)自己的使用環(huán)境和習(xí)慣相應(yīng)地調(diào)整。這些平臺上Go語言環(huán)境的安裝和使用,請參考附錄?!? 讀者可以從本書的支持網(wǎng)站www.goplace.org下載acme.zip。它完全不需安裝,直接解壓到Windows的c:\即可。Go工具和運行環(huán)境要求安裝在c:\Go下面。而Acme是在c:\acme.app下面,執(zhí)行它里面的acme.bat,就可以啟動編輯器了。 我們看一下acme.bat: set GOROOT=c:\\Go set GOPATH=c:\\acme-home\\ PATH=%PATH%;%GOROOT%\bin c: cd \acme.app\Contents\Resources acme.exe 這里有幾個重要的路徑: “ GOROOT是Go的正式軟件所在路徑; “ GOPATH是我們自己的軟件和第三方的Go軟件所在路徑; “ PATH中必須包括GOROOT的bin才可以使用Go工具; “ acme-home是Acme存放文件的根目錄。 如果讀者希望安裝到其他路徑下,則需要對acme.bat做相應(yīng)的修改。 Acme很神秘?其實編輯器就像鋼筆鉛筆,純屬個人喜好。一開始用哪個都寫不出好字。慢慢地習(xí)慣了一種,就覺得它用著順手了。所以,還沒有習(xí)慣使用具體某一款編輯器的讀者,不妨多試試,或許你會發(fā)現(xiàn)Acme是最出色的程序編輯器。順便一提,Acme和Go一樣,是Rob Pike的作品。C語言和Unix之父Dennis Ritchie也使用Acme?!? 啟動Acme后的第一感覺就是”它很不一般“,而且?guī)缀跻部梢哉f是”不知所措“。菜單在哪里?幫助在哪里?怎么打開文件?在直接給出這些答案之前,我們有必要了解它的設(shè)計哲學(xué)。只有明白了我們真正需要的是什么,才曉得為何這樣以及如何才能這樣?!? Acme和Unix的設(shè)計哲學(xué)是一脈相承的,都是只提供少量基本工具以及組合它們的方法,而不是針對每一項需求都準(zhǔn)備互不相干的幾十個上百個選項?!? 其實,Acme就是一個運行在類似Unix的虛擬機上的編輯器。這個虛擬機使用Inferno操作系統(tǒng)。這和Emacs編輯器運行在Lisp虛擬機上類似。只不過,Emacs只能使用Lisp編程來配置編輯器的各項功能,而它的Lisp程序只為Emacs服務(wù)。Acme則只是Inferno的一個程序。我們可以使用類似Unix的sh腳本,以及使用類似Go的Limbo編程語言,來編寫Inferno的其他命令和程序,與Acme一起配合,完成所需的編輯工作。 這樣的Acme,也可以認(rèn)為是Inferno操作系統(tǒng)的圖形用戶界面(GUI)。只不過,相對于傳統(tǒng)WIMP(窗口、圖標(biāo)、菜單、指針)的GUI風(fēng)格,Acme簡化為WP(窗口和指針)--剛好也可以代表Word Processing(文字處理)。這是因為,與其在幾千年后再來發(fā)明一套類似象形文字的圖標(biāo),為何不直接使用人們已經(jīng)使用了很久的字詞呢?與其干等著別人為你做好菜,讓你伸手去點單,為何不去自己享受做菜的樂趣呢?難道程序員的本行不是編程嗎?為何程序員所用的編輯器就不能自己編程定制功能呢?所以,學(xué)會了使用Acme的程序員,得到了這些問題的答案以后,就再也不能容忍傳統(tǒng)的編輯器和IDE了?!? 到底如何才能打開文件?從哪里能得到幫助? 歡迎Windows世界的同學(xué)打開窗口,感受Unix世界的清新和煦?!? Unix的世界除了文件,就是文字。例如,在Acme的隨便什么地方打入個斜杠字符”/“--這是Unix的根目錄和目錄分隔符,再用鼠標(biāo)右鍵單擊這個字符,就可以看到根目錄下的文件和子目錄。Acme的根目錄在Windows中是c:\acme.app;而在Acme窗口的最上面一行輸入一個點”.“,并同樣使用鼠標(biāo)右鍵單擊這個點,就可以看到用戶目錄,在Windows中該目錄為c:\acme-home。而Windows的根目錄是c:\,這里把它定義為/me。這個定義可以在根配置文件/lib/sh/profile中看到。要打開這個文件,當(dāng)然可以在Acme的任意位置輸入文件名再單擊右鍵,也可以從/開始一直右鍵選擇每個目錄名,直到所需文件出現(xiàn)在一個窗口中。文件名所在的淺藍(lán)行是窗口欄,在此處輸入me再單擊右鍵,就在profile文件里面找到第一次出現(xiàn)的me。同樣連續(xù)單擊右鍵,就一直查找下去。由此可見,在Acme里查找文件和查找文字都只需用無名指單擊即可?!? 說到窗口,Acme的多窗口是并行排列的。默認(rèn)是兩列,每列內(nèi)可以打開多個窗口,每個窗口都有一行天藍(lán)色的標(biāo)題欄。滾動條在左側(cè)。滾動條和標(biāo)題欄交匯的小方格,在窗口內(nèi)容有變化時變成深藍(lán)。按住鼠標(biāo)左鍵移動此方格,可以重新排列窗口的位置。單擊可以擴(kuò)大窗口。而用中鍵或右鍵單擊,則可以整列顯示此窗口,或再次顯示其他窗口的標(biāo)題欄。在滾動條內(nèi)單擊鼠標(biāo)左鍵和右鍵可以上下翻頁,或用中鍵單擊和移動光標(biāo)到所需位置?!? Acme最獨特的是鼠標(biāo)語言。它的三個鼠標(biāo)鍵經(jīng)單獨或組合使用可以完成大量的操作。具體操作如表1-1所示?!? 表1-1 Acme鼠標(biāo)鍵組合表 左 中 右 代 表 1+ 0 0 移動光標(biāo) 1++ 0 0 選詞(整行或括號、引號括起來的段落) 1-- 0 0 選擇范圍(選中部分高亮顯示) 0 1+ 0 執(zhí)行命令 0 1-- 0 紅色高亮顯示選中部分,執(zhí)行命令 0 0 1+ 打開文件或查找 0 0 1-- 綠色高亮顯示選中部分,打開或查找 1-- 2+ 0 刪除選擇內(nèi)容 1-- 2+ 3+ 粘貼回刪除的內(nèi)容,即復(fù)制 1+ 0 2+ 粘貼回刪除的內(nèi)容 2+ 1+ 0 將之前選中的內(nèi)容傳給命令執(zhí)行 這里,1、2、3是按鍵順序,0代表不按鍵。+是單擊,++是雙擊,--是按鍵拖動鼠標(biāo)。可以簡單地總結(jié)為:左鍵選取文字,中鍵執(zhí)行,右鍵查看選中內(nèi)容,左中刪,左右貼。試著練習(xí)幾分鐘之后,這些也就成了小腦指令了--無需大腦去想了?!? 如果沒有三鍵鼠標(biāo),建議你去買一個,因為你可能以后會經(jīng)常用到Acme。當(dāng)然,偶爾也可以用普通鼠標(biāo)的滾輪代替中鍵,甚至在筆記本電腦上用Ctrl配合右鍵代替中鍵?;蛘呤褂帽?-2所示的Ctrl鍵組合執(zhí)行常用命令。 表1-2 Acme鍵盤命令表 Ctrl鍵組合 執(zhí)行操作 a 轉(zhuǎn)至行首 b 返回上頁 c 復(fù)制 d 補全 e 轉(zhuǎn)至行尾 f 轉(zhuǎn)至下頁 h 退格 i Tab k 左移 l 右移 m 換行 n 下移 o 上移 p 轉(zhuǎn)至文件尾 q 轉(zhuǎn)至文件頭 s 保存 u 刪整行 v 粘貼 w 刪除 x 剪切 y 重復(fù) z 撤銷 習(xí)慣Acme的關(guān)鍵就是鼠標(biāo)命令,而使用鼠標(biāo)命令的方便之處在于,Acme的所有文字,都是可以用鼠標(biāo)命令來操作的。也就是說,不管命令位于何處,是在標(biāo)題行或者一個窗口里,只要在其上按中鍵或按住中鍵掃過,都是執(zhí)行保存文件的操作。而在其上按右鍵,都是執(zhí)行查找的操作。這樣,我們把一些最常用的命令放在每個窗口的標(biāo)題行,只要中指輕輕一點就可以了。這些命令和一些不太常用的命令如表1-3所示?!? 表1-3 Acme鼠標(biāo)命令表 中 文 英 文 代 表 剪 Cut 剪切選中的內(nèi)容 拷 Copy 復(fù)制選中的內(nèi)容 貼 Paste 粘貼上次剪切的內(nèi)容 新 New 在新窗口中打開選中的文件 關(guān) Del 關(guān)閉此窗口 悔 Undo 撤銷上次修改 不悔 Redo 重復(fù)上次撤銷 存 Put 保存文件 讀 Get 重新讀取文件 查 Look 查找選中的詞語或文件 令 Edit 執(zhí)行選中的編輯命令 編 Compile 編譯Go文件 Zerox 在新窗口打開同一文件 Putall 保存所有窗口內(nèi)容 Dump 保存窗口狀態(tài),下次自動打開 Newcol 增添一列 Delcol 刪除一列 Exit 退出Acme(不保存) win 命令控制窗口 man 幫助手冊 g 查找C和Go文件的內(nèi)容 mkdir、touch、rm 新建目錄,新建文件,刪除目錄或文件 一些常用的編輯命令可以保存在/guide文件里。每次選中一條命令,用鼠標(biāo)中鍵加左鍵單擊在某個窗口的”令“字符上,就可以對此窗口文件的內(nèi)容執(zhí)行編輯操作了。例如,選擇幾行程序,執(zhí)行,s/^/ /g命令就可以在每個行首加一個tab字符,也就是整體右移。而執(zhí)行,s/^//g就可以去掉行首的tab,整體左移。這些編輯命令,可能是初學(xué)者的最大障礙,卻也是Acme最強大、最靈活的地方。所有的幫助文件,都在/man目錄下面。如果要學(xué)習(xí)Acme的編輯命令,讀者可以在Acme里執(zhí)行man acme;如果要看shell的編程,執(zhí)行man sh即可;而右鍵單擊類似sh-std(1)這樣的格式,也可以幫助我們看到幫助文件。這是因為,我們在lib/plumbing里,定義了右鍵的規(guī)則,讓這一點也能具備可以編程的一點智能。 不多講了。再次重申,編輯器的選擇是個人喜好,選擇什么都和Go語言無關(guān)。 ……
編輯推薦
云計算時代的新型編程語言 編程極客不可不學(xué) 示例豐富,引人入勝,一本就Go!
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載