Go語(yǔ)言官方自稱(chēng),之所以開(kāi)發(fā)Go 語(yǔ)言,是因?yàn)椤敖?0年來(lái)開(kāi)發(fā)程序之難讓我們有點(diǎn)沮喪”。這一定位暗示了Go語(yǔ)言希望取代C和Java 的地位,成為最流行的通用開(kāi)發(fā)語(yǔ)言。
Go希望成為互聯(lián)網(wǎng)時(shí)代的C語(yǔ)言。多數(shù)系統(tǒng)級(jí)語(yǔ)言(包括Java 和C#)的根本編程哲學(xué)來(lái)源于C++ ,將C++ 的面向?qū)ο筮M(jìn)一步發(fā)揚(yáng)光大。但是Go語(yǔ)言的設(shè)計(jì)者卻有不同的看法,他們認(rèn)為C++ 真的沒(méi)啥好學(xué)的,值得學(xué)習(xí)的是C語(yǔ)言。C語(yǔ)言經(jīng)久不衰的根源是它足夠簡(jiǎn)單。因此,Go語(yǔ)言也要足夠簡(jiǎn)單!。這本書(shū)從整體的寫(xiě)作風(fēng)格來(lái)說(shuō),會(huì)以介紹 Go 語(yǔ)言特性為主,示例則盡量采用作者平常的實(shí)踐,而不是一個(gè)沒(méi)有太大實(shí)際意義的語(yǔ)法示范樣例。
Google最近發(fā)布新型的編程語(yǔ)言,Go。它被設(shè)計(jì)為將現(xiàn)代編程語(yǔ)言的先進(jìn) 性帶入到目前仍由C語(yǔ)言占統(tǒng)治地位的系統(tǒng)層面。然而,這一語(yǔ)言仍在試驗(yàn)階段并在不斷演變。Go的語(yǔ)法傳承了與C一樣的風(fēng)格。程序由函數(shù)組成,而函數(shù)體是一系列的語(yǔ)句序列。一段代碼塊用花括號(hào)括起來(lái)。這門(mén)語(yǔ)言保留有限的關(guān)鍵字。表達(dá)式使用 同樣的中綴運(yùn)算符。語(yǔ)法上并無(wú)太多出奇之處。
本書(shū)以介紹Go語(yǔ)言特性為主,示例則盡量采用作者開(kāi)發(fā)團(tuán)隊(duì)平常的實(shí)踐,內(nèi)容涉及內(nèi)存管理(堆和棧)、錯(cuò)誤處理、OOP、并發(fā)編程等關(guān)鍵話(huà)題。 這本書(shū)面向的讀者是所有打算用Go語(yǔ)言的開(kāi)發(fā)者,主要包括目前使用C、C++、Java、C#的開(kāi)發(fā)人員,甚至一些Python、PHP開(kāi)發(fā)人員也可能轉(zhuǎn)為 Go 程序員。
目錄
序 為什么我們需要一門(mén)新的語(yǔ)言?
第1章 初識(shí)Go語(yǔ)言
1.1 Go語(yǔ)言簡(jiǎn)史
1.2 語(yǔ)言特性
1.3 “Hello, world!”
1.4 編譯環(huán)境
1.5 開(kāi)發(fā)工具
1.6 工程管理
1.7 問(wèn)題追蹤和調(diào)試
1.8 如何尋求幫助
本章小結(jié)
第2章 順序編程
2.1 變量、常量和類(lèi)型
2.1.1 變量
2.1.2 常量
2.1.3 類(lèi)型
2.2 流程控制
2.2.1 條件語(yǔ)句
2.2.2 選擇語(yǔ)句
2.2.3 循環(huán)
2.2.4 跳轉(zhuǎn)語(yǔ)句
2.3 函數(shù)
2.3.1 函數(shù)調(diào)用
2.3.2 不定參數(shù)
2.3.3 多返回值
2.3.4 匿名函數(shù)與閉包
2.4 錯(cuò)誤處理
2.4.1 error接口
2.4.2 defer
2.4.3 panic和recover
本章小結(jié)
第3章 面向?qū)ο缶幊?br />3.1 類(lèi)型系統(tǒng)
3.1.1 給類(lèi)型添加方法
3.1.2 值語(yǔ)義和引用語(yǔ)義
3.2 結(jié)構(gòu)體
3.2.1 初始化
3.2.2 匿名組合
3.2.3 成員可訪問(wèn)性
3.3 接口
3.3.1 其他語(yǔ)言中的接口
3.3.2 非侵入式接口
3.3.3 接口賦值
3.3.4 接口查詢(xún)
3.3.5 類(lèi)型查詢(xún)
3.3.6 Any類(lèi)型
本章小結(jié)
第4章 工程管理
4.1 Go命令行工具
4.2 代碼風(fēng)格
4.3 工程組織
4.4 單元測(cè)試
4.5 文檔管理
4.6 工程構(gòu)建
4.7 包的管理與分發(fā)
4.8 跨平臺(tái)開(kāi)發(fā)
4.8.1 Go語(yǔ)言的跨平臺(tái)能力
4.8.2 交叉編譯
4.8.3 Android支持
本章小結(jié)
第5章 并發(fā)編程
5.1 初識(shí)Goroutine
5.1.1 基本用法
5.1.2 Goroutine通信
5.2 Channel
5.2.1 基本用法
5.2.2 關(guān)閉
5.2.3 變量的傳遞
5.2.4 單向Channel
5.2.5 超時(shí)處理
5.3 多核并行化
5.4 同步機(jī)制
5.4.1 sync包簡(jiǎn)介
5.4.2 同步鎖
5.4.3 Once類(lèi)型
本章小結(jié)
第6章 網(wǎng)絡(luò)編程
6.1 HTTP編程
6.1.1 客戶(hù)端編程
6.1.2 開(kāi)發(fā)HTTP服務(wù)器
6.2 JSON
6.2.1 JSON簡(jiǎn)介
6.2.2 編碼
6.2.3 解碼
6.2.4 未知類(lèi)型的解碼
6.2.5 流式讀寫(xiě)
6.3 網(wǎng)站開(kāi)發(fā)
6.3.1 一個(gè)最簡(jiǎn)單的網(wǎng)站
6.3.2 開(kāi)發(fā)一個(gè)相冊(cè)網(wǎng)站
6.3.2.1 新建工程
6.3.2.2 實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)
6.3.2.3 網(wǎng)頁(yè)模板渲染
6.3.2.4 緩存
6.3.2.5 錯(cuò)誤處理
6.3.2.6 防止程序崩潰
6.3.2.7 資源分離
6.3.2.8 重構(gòu)
6.4 更多資源
本章小結(jié)
第7章 進(jìn)階話(huà)題
7.1 Go語(yǔ)言中的內(nèi)存管理
7.2 反射
7.3 語(yǔ)言交互性CGO
7.4 鏈接符號(hào)
7.5 Goroutine實(shí)現(xiàn)機(jī)制
7.6 接口的奧秘
本章小結(jié)
第8章 開(kāi)發(fā)工具
8.1 Go語(yǔ)言開(kāi)發(fā)工具
8.2 gEdit
8.3 Goclipse - 使用Eclipse開(kāi)發(fā)和調(diào)試Go程序
8.4 VIM
8.5 Nodepad++,Windows上的Go開(kāi)發(fā)環(huán)境搭建
8.6 GolangIDE
本章小結(jié)
附錄 Go語(yǔ)言包參考