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