目錄
出版說明
前言
第1章 Go語言簡介
1.1 為什麼要學Go語言
1.2 Go語言安裝
1.3 Go語言開發工具
第2章 Go語言編程基礎
2.1 數據類型
2.1.1 基礎數據類型
2.1.2 複合數據類型
2.2 變數
2.2.1 變數以及聲明
2.2.2 零值(nil)
2.3 常量
2.3.1 常量定義
2.3.2 iota
2.3.3 字面量(literal)
2.4 運算符
2.4.1 內置運算符
2.4.2 運算符優先順序
2.4.3 幾個特殊運算符
2.5 字元串
2.5.1 字元串介紹
2.5.2 字元串拼接
2.5.3 字元串處理
2.6 流程式控制制
2.6.1 switch語句
2.6.2 select語句
2.6.3 for語句
2.6.4 for-range結構
2.6.5 if語句
2.6.6 break語句
2.6.7 continue語句
2.6.8 標籤
2.6.9 goto語句
第3章 作用域
3.1 關於作用域
3.1.1 局部變數與全局變數
3.1.2 顯式與隱式代碼塊
3.2 約定和慣例
3.2.1 可見性規則
3.2.2 命名規範以及語法慣例
3.2.3 註釋
第4章 代碼結構化與項目管理
4.1 包(package)
4.1.1 包的概念
4.1.2 包的初始化
4.1.3 包的導入
4.1.4 標準庫
4.1.5 從GitHub安裝包
4.1.6 導入外部安裝包
4.2 Go項目開發與編譯
4.2.1 項目結構
4.2.2 使用Godoc
4.2.3 Go程序的編譯
4.2.4 Go modules包依賴管理
第5章 複合數據類型
5.1 數組(array)
5.1.1 數組定義
5.1.2 數組聲明與使用
5.2 切片(slice)
5.2.1 切片介紹
5.2.2 切片重組(reslice)
5.2.3 陳舊的切片(Stale Slices)
5.3 字典(map)
5.3.1 字典介紹
5.3.2 range語句中的值
第6章 type關鍵字
6.1 type自定義類型
6.2 type定義類型別名
第7章 錯誤處理與defer
7.1 錯誤處理
7.1.1 錯誤類型(error)
7.1.2 panic
7.1.3 recover
7.2 關於defer
7.2.1 defer的三個規則
7.2.2 使用defer計算函數執行時間
第8章 函數
8.1 函數(function)
8.1.1 函數介紹
8.1.2 函數調用
8.1.3 內置函數
8.1.4 遞歸與回調
8.1.5 匿名函數
8.1.6 變參函數
第9章 結構體和介面
9.1 結構體(struct)
9.1.1 結構體介紹
9.1.2 結構體特性
9.1.3 匿名欄位
9.1.4 嵌入與聚合
9.1.5 命名衝突
9.2 介面(interface)
9.2.1 介面是什麼
9.2.2 介面嵌入
9.2.3 類型斷言
9.2.4 介面與動態類型
9.2.5 介面的提取
9.2.6 介面的繼承
第10章 方法
10.1 方法的定義
10.1.1 接收器(receiver)
10.1.2 方法表達式與方法值
10.1.3 自定義類型方法與匿名嵌入
lO.1.4 函數和方法的區別
10.2 指針方法與值方法
10.2.1 指針方法與值方法的區別
lO.2.2 介面變數上的指針方法與值方法
10.2.3 指針接收器和值接收器的選擇
10.3 匿名類型的方法提升
1O.3.1 匿名類型的方法調用
10.3.2 方法提升規則
第ll章 面向對象與內存
11.1 面向對象
11.1.1 Go語言中的面向對象
11.1.2 多重繼承
11.2 指針和內存
11.2.1 指針
11.2.2 new()和make()的區別
11.2.3 垃圾回收
第12章 併發處理
12.1 協程
12.1.1 協程與併發
12.1.2 協程使用
12.2 通道(channel)
12.3 同步與鎖
12.3.1 互斥鎖
12.3.2 讀寫鎖
12.3.3 sync.WaitGroup
12.3.4 sync.Once
12.3.5 sync.Map
第13章 測試與調優
13.1 測試
13.1.1 單元測試
13.1.2 基準測試
13.2 調優
13.2.1 分析Go程序
13.2.2 用pprof調試
第14章 系統標準庫
14.1 reflect包
14.1.1 反射(reflect)
14.1.2 反射的應用
14.2 unsafe包
14.2.1 unsafe包介紹
14.2.2 指針運算
14.3 sort包
14.3.1 sort包介紹
14.3.2 自定義sort.Interface排序
14.3.3 sort.Slice排序
14.4 os包
14.4.1 啟動外部命令和程序
14.4.2 os/signal信號處理
14.5 fmt包
14.5.1 格式化I/O
14.5.2 格式化輸出
14.6 flag包
14.6.1 命令行
14.6.2 參數解析
14.7 文件操作與I/O
14.7.1 文件操作
14.7.2 I/O讀寫
14.7.3 ioutil包讀寫
14.7.4 bufio包讀寫
14.7.5 log包日誌操作
第15章 網路服務
15.1 Socket
15.1.1 Socket基礎知識
15.1.2 TCP與UDP
15.2 模板(Template)
15.2.1 text/template包
15.2.2 html/template包
15.2.3 模板語法
15.3 net/http包
15.3.1 http Request
15.3.2 http Response
15.3.3 http Client
15.3.4 http Server
15.3.5 自定義類型Handler
15.3.6 將函數直接作為Handler
15.3.7 中間件
15.3.8 搭建靜態站點
15.4 context包
15.4.1 context包介紹
15.4.2 上下文應用
第16章 數據格式與存儲
16.1 數據格式
16.1.1 序列化與反序列化
16.1.2 JSON數據格式
16.1.3 將JSON數據反序列化到結構體
16.1.4 反序列化任意JSON數據
16.1.5 JSON數據編碼和解碼
16.1.6 JSON數據延遲解析
16.1.7 Protocol Buffer數據格式
16.2 MySQL資料庫
16.2.1 database/sql包
16.2.2 MySQL資料庫操作
16.3 LevelDB與BoltDB資料庫
16.3.1 LevelDB資料庫操作
16.3.2 BoltDB資料庫操作
第17章 網路爬蟲
17.1 CollV網路爬蟲框架