- 第 1 章:Go 語言的起源,發展與普及
- 1.1 起源與發展
- 1.2 語言的主要特性與發展的環境和影響因素
- 第 2 章:安裝與執行環境
- 2.1 平台與架構
- 2.2 Go 環境變數
- 2.3 在 Linux 上安裝 Go
- 2.4 在 Mac OS X 上安裝 Go
- 2.5 在 Windows 上安裝 Go
- 2.6 安裝目錄清單
- 2.7 Go 執行時 (runtime)
- 2.8 Go 直譯器
- 第 3 章:編輯器、整合開發環境與其它工具
- 3.1 Go 開發環境的基本要求
- 3.2 編輯器和整合開發環境
- 3.3 偵錯程式
- 3.4 建構並執行 Go 程式
- 3.5 格式化程式碼
- 3.6 產生程式碼文件
- 3.7 其它工具
- 3.8 Go 效能說明
- 3.9 與其它語言進行互動
- 第 4 章:基本結構和基本資料型別
- 4.1 檔名、關鍵字與識別符號
- 4.2 Go 程式的基本結構和要素
- 4.3 常量
- 4.4 變數
- 4.5 基本型別和運算子
- 4.6 字串
- 4.7 strings 和 strconv 包
- 4.8 時間和日期
- 4.9 指標
- 第 5 章:控制結構
- 5.1 if-else 結構
- 5.2 測試多返回值函式的錯誤
- 5.3 switch 結構
- 5.4 for 結構
- 5.5 Break 與 continue
- 5.6 標籤與 goto
- 第 6 章:函式 (function)
- 第 7 章:陣列與切片
- 7.1 宣告和初始化
- 7.2 切片
- 7.3 For-range 結構
- 7.4 切片重組 (reslice)
- 7.5 切片的複製與追加
- 7.6 字串、陣列和切片的應用
- 第 8 章:Map
- 8.1 宣告、初始化和 make
- 8.2 測試鍵值對是否存在及刪除元素
- 8.3 for-range 的配套用法
- 8.4 map 型別的切片
- 8.5 map 的排序
- 8.6 將 map 的鍵值對調
- 第 9 章:包 (package)
- 9.1 標準庫概述
- 9.2 regexp 包
- 9.3 鎖和 sync 包
- 9.4 精密計算和 big 包
- 9.5 自訂套件和可見性
- 9.6 為自訂套件使用 godoc
- 9.7 使用 go install 安裝自訂包
- 9.8 自訂套件的目錄結構、go install 和 go test
- 9.9 透過 Git 打套件和安裝
- 9.10 Go 的外部套件和專案
- 9.11 在 Go 程式中使用外部庫
- 第 10 章:結構 (struct) 與方法 (method)
- 10.1 結構體定義
- 10.2 使用工廠方法建立結構體例項
- 10.3 使用自訂套件中的結構體
- 10.4 帶標籤的結構體
- 10.5 匿名欄位和內嵌結構體
- 10.6 方法
- 10.7 型別的 String() 方法和格式化描述符
- 10.8 垃圾回收和 SetFinalizer
- 第 11 章:介面 (interface) 與反射 (reflection)
- 11.1 介面是什麼
- 11.2 介面巢狀(Nesting)介面
- 11.3 型別斷言:如何檢測和轉換介面變數的型別
- 11.4 型別判斷:type-switch
- 11.5 測試一個值是否實現了某個介面
- 11.6 使用方法集與介面
- 11.7 第一個例子:使用 Sorter 介面排序
- 11.8 第二個例子:讀和寫
- 11.9 空介面
- 11.10 反射包
- 11.11 Printf 和反射
- 11.12 介面與動態型別
- 11.13 總結:Go 中的面向物件
- 11.14 結構體、集合和高階函式
- 第 12 章:讀寫資料
- 12.1 讀取使用者的輸入
- 12.2 檔案讀寫
- 12.3 檔案複製
- 12.4 從命令列讀取引數
- 12.5 用 buffer 讀取檔案
- 12.6 用切片讀寫檔案
- 12.7 用 defer 關閉檔案
- 12.8 使用介面的實際例子:fmt.Fprintf
- 12.9 JSON 資料格式
- 12.10 XML 資料格式
- 12.11 用 Gob 傳輸資料
- 12.12 Go 中的密碼學
- 第 13 章:錯誤處理與測試
- 13.1 錯誤處理
- 13.2 執行時例外和 panic
- 13.3 從 panic 中恢復 (recover)
- 13.4 自訂套件中的錯誤處理和 panicking
- 13.5 一種用閉包處理錯誤的模式
- 13.6 啟動外部命令和程式
- 13.7 Go 中的單元測試和基準測試
- 13.8 測試的具體例子
- 13.9 用(測試資料)表驅動測試
- 13.10 效能除錯:分析並最佳化 Go 程式
- 第 14 章:協程 (goroutine) 與通道 (channel)
- 14.1 併發、並行和協程
- 14.2 協程間的通道
- 14.3 協程的同步:關閉通道-測試阻塞的通道
- 14.4 使用 select 切換協程
- 14.5 通道、超時和計時器 (Ticker)
- 14.6 協程和恢復 (recover)
- 14.7 新舊模型對比:任務和worker
- 14.8 惰性產生器的實現
- 14.9 實現 Futures 模式
- 14.10 複用
- 14.11 限制同時處理的請求數
- 14.12 鏈式協程
- 14.13 在多核心上平行計算
- 14.14 並行化大量資料的計算
- 14.15 漏桶演算法
- 14.16 對Go協程進行基準測試
- 14.17 使用通道併發存取物件
- 第 15 章:網路、範本與網頁應用
- 15.1 tcp 伺服器
- 15.2 一個簡單的 web 伺服器
- 15.3 存取並讀取頁面資料
- 15.4 寫一個簡單的網頁應用
- 15.5 確保網頁應用健壯
- 15.6 用範本編寫網頁應用
- 15.7 探索 template 包
- 15.8 精巧的多功能網頁伺服器
- 15.9 用 rpc 實現遠端過程呼叫
- 15.10 基於網路的通道 netchan
- 15.11 與 websocket 通訊
- 15.12 用 smtp 傳送郵件
- 第 16 章:常見的陷阱與錯誤
- 16.1 誤用短宣告導致變數覆蓋
- 16.2 誤用字串
- 16.3 發生錯誤時使用 defer 關閉一個檔案
- 16.4 何時使用 new() 和 make()
- 16.5 不需要將一個指向切片的指標傳遞給函式
- 16.6 使用指針指向介面型別
- 16.7 使用值型別時誤用指標
- 16.8 誤用協程和通道
- 16.9 閉套件和協程的使用
- 16.10 糟糕的錯誤處理
- 第 17 章:模式
- 第 18 章:出於效能考慮的實用程式碼片段
- 第 19 章:建構一個完整的應用程式
- 19.1 簡介
- 19.2 短網址專案簡介
- 19.3 資料結構
- 19.4 使用者介面:web 伺服器端
- 19.5 持久化儲存:gob
- 19.6 用協程最佳化效能
- 19.7 以 json 格式儲存
- 19.8 多伺服器處理架構
- 19.9 使用代理快取
- 19.10 總結和增強
- 第 20 章:Go 語言在 Google App Engine 的使用
- 20.1 什麼是 Google App Engine?
- 20.2 雲上的 Go
- 20.3 安裝 Go App Engine SDK:為 Go 部署的開發環境
- 20.4 建造你自己的 Hello world 應用
- 20.5 使用使用者服務和探索其 API
- 20.6 處理視窗
- 20.7 使用資料儲存
- 20.8 上傳到雲端
- 第 21 章:真實世界中 Go 的使用
- 21.1 Heroku:一個使用 Go 的高度可用一致資料儲存
- 21.2 MROffice:一個使用 Go 的呼叫中心網路電話 (VOIP) 系統
- 21.3 Atlassian:一個虛擬機器群管理系統
- 21.4 Camilistore:一個可定址內容儲存系統
- 21.5 Go 語言的其他應用
- A 程式碼參考
- B 有趣的 Go 參考
- C 程式碼範例列表
- D 書中的包參考
- E 書中的工具參考
- F 常見問題解答
- G 習題答案
- H 參考文獻