Go語言適合用來進行服務(wù)器編程與網(wǎng)絡(luò)編程,包括Web應(yīng)用編程等。本書詳細講解了Go語言數(shù)據(jù)類型、關(guān)鍵字、字面量、基本語法等基礎(chǔ)概念及Go項目的工程構(gòu)建、測試、編譯與運行等;深入講解了協(xié)程(goroutine)和通道(channel)等與并發(fā)編程有關(guān)的概念;還介紹了系統(tǒng)標(biāo)準(zhǔn)庫、網(wǎng)絡(luò)編程和第三方包。讀者掌握本書內(nèi)容后,可以順利進行實際項目開發(fā)。
本書適合Go語言初學(xué)者和有一定經(jīng)驗的程序員閱讀。
書中代碼可免費下載(掃描封底二維碼)。
現(xiàn)在市面上與Go語言相關(guān)的書籍較少,大部分書籍針對的是中高級開發(fā)人員,而從基礎(chǔ)知識講解,進而到初步應(yīng)用開發(fā)的指導(dǎo)性書籍更少。
針對以上情況,本書詳細講解了Go語言基礎(chǔ)知識點,并聯(lián)系實際指出其可能存在的陷阱,幫助讀者加深學(xué)習(xí)時的理解。本書還結(jié)合流行度較高的開源第三方包,引導(dǎo)讀者進行更高級的實際項目開發(fā)。
本書非常適合Go語言新手細細閱讀。有一定經(jīng)驗的開發(fā)人員,也可以根據(jù)自己的情況,選擇一些章節(jié)來看。
第 1~4章為基礎(chǔ)部分,主要講解Go語言的基礎(chǔ)知識,包括Go語言的安裝、基本語法、標(biāo)識符、關(guān)鍵字、運算符、標(biāo)點符號、字面量等,以及Go項目的工程構(gòu)建、編譯與運行等。
第 5~8 章為中級部分,主要講解Go語言的復(fù)合數(shù)據(jù)類型,包括數(shù)組(array)、切片(slice)、字典(map)、結(jié)構(gòu)體(struct)、指針(pointer)、函數(shù)(function)、接口(interface)和通道(channel)類型等。利用靈活的type關(guān)鍵字,可以自定義各種需要的數(shù)據(jù)類型。函數(shù)提供了更直接的數(shù)據(jù)處理能力,而通過panic,recover,defer處理錯誤的方式,也是Go語言的典型特征。
第9~13章為高級部分,主要講解結(jié)構(gòu)體、接口和方法,它們是Go語言簡單與組合思維的基礎(chǔ)。非常友好地支持并發(fā)是Go語言天然具有的典型特征,協(xié)程(gorountine)和通道(channel)配合,加上sync 包提供的系列功能,使我們可以很方便地編寫支持高并發(fā)的代碼。
第14~16章為拓展部分,主要介紹Go語言提供的官方標(biāo)準(zhǔn)庫,包括OS操作、文件I/O、網(wǎng)絡(luò)傳輸處理、指針相關(guān)操作、代碼反射、日志記錄等。這些包可以讓我們快速進入實際開發(fā)。另外對MySQL數(shù)據(jù)庫以及LevelDB、BoltDB數(shù)據(jù)庫的操作有簡單介紹。
第17、18章為應(yīng)用部分,主要以網(wǎng)絡(luò)爬蟲和Web框架為例,進入實際開發(fā)。網(wǎng)絡(luò)爬蟲是互聯(lián)網(wǎng)服務(wù)中比較重要的功能,通過互聯(lián)網(wǎng)抓取、分析、保存資料是程序員的一項基本能力,讀者可以看到Go語言在此方面也是游刃有余。而利用Gin這款輕量級的Web框架,可以很方便地搭建各種Web服務(wù)。
自2009年Go語言面世以來,已經(jīng)有越來越多的公司轉(zhuǎn)向Go語言開發(fā)。而Go語言以語法簡單、學(xué)習(xí)門檻低、上手快著稱,但入門后很多人發(fā)現(xiàn)要寫出地道的、遵循 Go語言思維的代碼卻實屬不易。
我作為Go語言的愛好者,在閱讀系統(tǒng)標(biāo)準(zhǔn)庫源代碼或其他知名開源包源代碼時,發(fā)現(xiàn)大牛對這門語言的了解之深入,代碼實現(xiàn)之巧妙優(yōu)美,除了膜拜還是膜拜。所以我建議你有時間多多閱讀這些代碼,網(wǎng)上說Go大神的標(biāo)準(zhǔn)是“能理解簡潔和可組合性哲學(xué)”。的確,Go語言追求代碼簡潔到極致,而組合思想可謂借助于結(jié)構(gòu)體和接口而成為Go的靈魂。
function、method、interface、type等名詞是程序員們接觸比較多的關(guān)鍵字,但在Go語言中,你會發(fā)現(xiàn),它們有更強大、更靈活的用法。當(dāng)你徹底理解了Go語言相關(guān)基本概念,以及對其特點有了深入的認知(當(dāng)然這也是這本書的目的),再假以時日多練習(xí)和實踐,我相信你很快就能真正掌握這門語言,成為一名出色的Gopher。
本書最早通過網(wǎng)絡(luò)發(fā)布,有不少關(guān)注Go語言的朋友通過各種途徑給了不少建議,這里要感謝網(wǎng)友Joyboo、林遠鵬、Mr_RSI、magic-joker等。
本書最終得以出版,需要感謝李巖兄的鼓勵和幫助,以及其他各位朋友和老師們,感謝你們的鼓勵和幫助,感謝你們的支持!
最后,希望更多的人了解和使用Go語言,也希望閱讀本書的朋友們多多交流。雖然本書中的例子都經(jīng)過實際運行,但難免會有錯誤和不足之處,煩請您指出。書中其他疏漏之處也懇請各位讀者斧正。作者聯(lián)系郵箱:roteman@163.com。
祝各位Gopher工作開心,編碼愉快!
李曉鈞
出版說明
前言
第1章 Go語言簡介1
1.1 為什么要學(xué)Go語言1
1.2 Go語言安裝1
1.3 Go語言開發(fā)工具4
第2章 Go語言編程基礎(chǔ)6
2.1 數(shù)據(jù)類型6
2.2 變量9
2.3 常量14
2.4 運算符18
2.5 字符串22
2.6 流程控制26
第3章 作用域37
3.1 關(guān)于作用域37
3.2 約定和慣例40
第4章 代碼結(jié)構(gòu)化與項目管理43
4.1 包(package)43
4.2 Go項目開發(fā)與編譯46
第5章 復(fù)合數(shù)據(jù)類型54
5.1 數(shù)組(array)54
5.2 切片(slice)56
5.3 字典(map)60
第6章 type關(guān)鍵字63
6.1 type自定義類型63
6.2 type定義類型別名64
第7章 錯誤處理與defer66
7.1 錯誤處理66
7.2 關(guān)于defer68
第8章 函數(shù)74
8.1 函數(shù)(function)74
第9章 結(jié)構(gòu)體和接口86
9.1 結(jié)構(gòu)體(struct)86
9.2 接口(interface)94
第10章 方法101
10.1 方法的定義101
10.2 指針方法與值方法108
值方法111
10.3 匿名類型的方法提升114
第11章 面向?qū)ο笈c內(nèi)存118
11.1 面向?qū)ο?18
11.2 指針和內(nèi)存119
第12章 并發(fā)處理124
12.1 協(xié)程124
12.2 通道(channel)127
12.3 同步與鎖131
第13章 測試與調(diào)優(yōu)140
13.1 測試140
13.2 調(diào)優(yōu)142
第14章 系統(tǒng)標(biāo)準(zhǔn)庫148
14.1 reflect包148
14.2 unsafe包155
14.3 sort包160
14.4 os包164
14.5 fmt包167
14.6 flag 包174
14.7 文件操作與I/O177
第15章 網(wǎng)絡(luò)服務(wù)186
15.1 Socket186
15.2 模板(Template)189
15.3 net/http包196
15.4 context包214
第16章 數(shù)據(jù)格式與存儲221
16.1 數(shù)據(jù)格式221
結(jié)構(gòu)體222
16.2 MySQL數(shù)據(jù)庫231
16.3 LevelDB與BoltDB 數(shù)據(jù)庫236
第17章 網(wǎng)絡(luò)爬蟲244
17.1 Colly網(wǎng)絡(luò)爬蟲框架244
17.2 goquery HTML解析246
第18章 Web框架—Gin250
18.1 關(guān)于Gin250
18.2 Gin實際應(yīng)用251
參考文獻260