Go語(yǔ)言圣經(jīng)是由美國(guó)作者艾倫 A.A.多諾萬(wàn)(Alan A.A.Donovan)和《C程序設(shè)計(jì)語(yǔ)言》的作者布萊恩 W.柯尼漢(Brian W.Kernighan)所編著的一本關(guān)于Go語(yǔ)言編程的權(quán)威著作。Go語(yǔ)言可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,提高編程效率,適合開(kāi)發(fā)大型軟件,有望成為主流的編程語(yǔ)言。
Go語(yǔ)言圣經(jīng)主要內(nèi)容
第一章包含了本教程的基本結(jié)構(gòu),通過(guò)十幾個(gè)程序介紹了用Go語(yǔ)言如何實(shí)現(xiàn)類似讀寫文件、文本格式化、創(chuàng)建圖像、網(wǎng)絡(luò)客戶端和服務(wù)器通訊等日常工作。
第二章描述了Go語(yǔ)言程序的基本元素結(jié)構(gòu)、變量、新類型定義、包和文件、以及作用域等概念。第三章討論了數(shù)字、布爾值、字符串和常量,并演示了如何顯示和處理Unicode字符。第四章描述了復(fù)合類型,從簡(jiǎn)單的數(shù)組、字典、切片到動(dòng)態(tài)列表。第五章涵蓋了函數(shù),并討論了錯(cuò)誤處理、panic和recover,還有defer語(yǔ)句。
第一章到第五章是基礎(chǔ)部分,主流命令式編程語(yǔ)言這部分都類似。個(gè)別之處,Go語(yǔ)言有自己特色的語(yǔ)法和風(fēng)格,但是大多數(shù)程序員能很快適應(yīng)。其余章節(jié)是Go語(yǔ)言特有的:方法、接口、并發(fā)、包、測(cè)試和反射等語(yǔ)言特性。
Go語(yǔ)言的面向?qū)ο髾C(jī)制與一般語(yǔ)言不同。它沒(méi)有類層次結(jié)構(gòu),甚至可以說(shuō)沒(méi)有類;僅僅通過(guò)組合(而不是繼承)簡(jiǎn)單的對(duì)象來(lái)構(gòu)建復(fù)雜的對(duì)象。方法不僅可以定義在結(jié)構(gòu)體上, 而且, 可以定義在任何用戶自定義的類型上;并且, 具體類型和抽象類型(接口)之間的關(guān)系是隱式的,所以很多類型的設(shè)計(jì)者可能并不知道該類型到底實(shí)現(xiàn)了哪些接口。方法在第六章討論,接口在第七章討論。
第八章討論了基于順序通信進(jìn)程(CSP)概念的并發(fā)編程,使用goroutines和channels處理并發(fā)編程。第九章則討論了傳統(tǒng)的基于共享變量的并發(fā)編程。
第十章描述了包機(jī)制和包的組織結(jié)構(gòu)。這一章還展示了如何有效地利用Go自帶的工具,使用單個(gè)命令完成編譯、測(cè)試、基準(zhǔn)測(cè)試、代碼格式化、文檔以及其他諸多任務(wù)。
第十一章討論了單元測(cè)試,Go語(yǔ)言的工具和標(biāo)準(zhǔn)庫(kù)中集成了輕量級(jí)的測(cè)試功能,避免了強(qiáng)大但復(fù)雜的測(cè)試框架。測(cè)試庫(kù)提供了一些基本構(gòu)件,必要時(shí)可以用來(lái)構(gòu)建復(fù)雜的測(cè)試構(gòu)件。
第十二章討論了反射,一種程序在運(yùn)行期間審視自己的能力。反射是一個(gè)強(qiáng)大的編程工具,不過(guò)要謹(jǐn)慎地使用;這一章利用反射機(jī)制實(shí)現(xiàn)一些重要的Go語(yǔ)言庫(kù)函數(shù), 展示了反射的強(qiáng)大用法。第十三章解釋了底層編程的細(xì)節(jié),在必要時(shí),可以使用unsafe包繞過(guò)Go語(yǔ)言安全的類型系統(tǒng)。
Go語(yǔ)言圣經(jīng)目錄
第1章綜述1
1.1Hello,World1
1.2命令行參數(shù)4
1.3查找重復(fù)行8
1.4GIF動(dòng)畫13
1.5獲取一個(gè)URL15
1.6并發(fā)獲取多個(gè)URL17
1.7實(shí)現(xiàn)一個(gè)Web服務(wù)器19
1.8雜項(xiàng)23
第2章程序結(jié)構(gòu)27
2.1名字27
2.2聲明28
2.3變量30
2.4賦值36
2.5類型聲明39
2.6包和文件41
2.7作用域45
第3章基本數(shù)據(jù)類型51
3.1整數(shù)51
3.2浮點(diǎn)數(shù)56
3.3復(fù)數(shù)61
3.4布爾量63
3.5字符串64
3.6常量75
第4章復(fù)合類型81
4.1數(shù)組81
4.2切片84
4.3鍵值對(duì)93
4.4結(jié)構(gòu)體99
4.5JSON107
4.6文本和HTML模板113
第5章函數(shù)119
5.1函數(shù)聲明119
5.2遞歸121
5.3多返回值124
5.4錯(cuò)誤127
5.5作為值的函數(shù)132
5.6匿名函數(shù)135
5.7變參函數(shù)142
5.8延后函數(shù)調(diào)用143
5.9崩潰148
5.10恢復(fù)151
第6章方法155
6.1方法聲明155
6.2帶有指針接收器的方法158
6.3包含嵌入結(jié)構(gòu)體的復(fù)合類型161
6.4作為值和表達(dá)式的方法164
6.5示例:位向量類型165
6.6封裝168
第7章接口171
7.1作為規(guī)約的接口171
7.2接口類型174
7.3接口約定的達(dá)成175
7.4使用flag.Value進(jìn)行標(biāo)志位分析179
7.5作為值的接口181
7.6使用sort.Interface進(jìn)行排序186
7.7http.Handler接口191
7.8錯(cuò)誤接口196
7.9示例:表達(dá)式評(píng)估器197
7.10類型斷言205
7.11使用類型斷言分辨錯(cuò)誤206
7.12使用接口類型斷言查詢行為208
7.13按類型的程序分支210
7.14示例:基于標(biāo)記符號(hào)的XML解碼213
7.15幾句建議216
第8章goroutine和信道217
8.1goroutine217
8.2示例:并發(fā)時(shí)鐘服務(wù)器219
8.3示例:并發(fā)回聲服務(wù)器222
8.4信道225
8.5并行循環(huán)234
8.6示例:并發(fā)Web爬蟲239
8.7使用select實(shí)現(xiàn)多工244
8.8示例:并發(fā)目錄遍歷247
8.9取消執(zhí)行251
8.10示例:聊天服務(wù)器253
第9章使用共享變量實(shí)現(xiàn)并發(fā)257
9.1競(jìng)險(xiǎn)257
9.2互斥量:sync.Mutex262
9.3讀寫互斥量:sync.RWMutex266
9.4內(nèi)存同步267
9.5緩式初始化:sync.Once268
9.6競(jìng)險(xiǎn)檢測(cè)器271
9.7示例:并發(fā)無(wú)阻塞式高速緩存272
9.8goroutine和線程280
第10章包和go工具283
10.1概述283
10.2導(dǎo)入路徑284
10.3包聲明285
10.4導(dǎo)入聲明285
10.5空導(dǎo)入286
10.6包和命名289
10.7go工具290
第11章測(cè)試301
11.1gotest工具302
11.2測(cè)試函數(shù)302
11.3覆蓋率318
11.4性能基準(zhǔn)函數(shù)321
11.5性能剖析323
11.6示例函數(shù)326
第12章反射329
12.1為什么會(huì)引入反射概念329
12.2reflect.Type和reflect.Value330
12.3遞歸值輸出Display333
12.4示例:對(duì)S-表達(dá)式編碼338
12.5使用reflect.Value給變量設(shè)置值341
12.6示例:對(duì)S-表達(dá)式解碼344
12.7訪問(wèn)結(jié)構(gòu)體域標(biāo)簽348
12.8列出類型的方法351
12.9幾句忠告352
第13章低階程序設(shè)計(jì)353
13.1unsafe.Sizeof、Alignof和Offsetof354
13.2unsafe.Pointer356
13.3示例:深等價(jià)358
13.4使用cgo調(diào)用C代碼361
13.5再來(lái)幾句忠告366