老男孩 Linux云計算運維 就業班正在火熱招生,坐席有限,【立即搶占報名名額】
內容簡介:
本書主要針對Go語言初學者快速入門Go語言,全書分為14章三大部分。 第一部分:其中第1章介紹了Go語言的發展歷史,并詳細介紹了搭建Go語言開發環境的步驟。 第2章到第10章介紹了Go語言的基礎語法,第11章介紹了Go語言賴以成名的并發編程的內容。 第二部分:第12章介紹了網絡編程部分的內容,自己動手實現一個HTTP Server和HTTP Client。第13章介紹了Go語言中如何進行單元測試。 第三部分:第14章重點介紹了Go語言常用的標準庫如fmt、time、flag、文件操作等標準庫的用法。
作者簡介:
書籍目錄:
前言 1
目錄 2
1.1 Go語言簡介 14
1.1.1 Go語言的發展歷史 14
1.1.2 Go語言的特點 14
1.1.3 Go語言的應用 14
1.2 安裝Go語言開發工具包 15
1.2.1 下載 15
1.2.2 安裝 15
1.3 配置GOPATH 19
1.4 Go語言項目結構 20
1.5 第一個Go語言程序 21
1.5.1 Go語言開發編輯器 21
1.5.2 安裝VSCode 21
1.5.3 Hello world 23
1.6 本章小結 24
1.7 練習題 25
第2章 Go語言基礎語法 26
2.1 Go語言語法規則 26
2.1.1 Go語言代碼結構 26
2.1.2 Go語言語法特點 26
2.2 標識符和關鍵字 27
2.2.1 標識符 27
2.2.2 關鍵字 27
2.3 變量 27
2.3.1 變量的來歷 27
2.3.2 變量聲明 27
2.3.3 變量的初始化 28
2.4 常量 29
2.4.1 常量聲明 29
2.4.2 iota 30
2.5 本章小結 31
第3章 基本數據類型與運算符 32
3.1 基本數據類型 32
3.1.1 整型 32
3.1.2 浮點型 33
3.1.3 復數 33
3.1.4 布爾值 33
3.1.5 字符串 34
3.1.6 byte和rune類型 35
3.2 運算符 36
3.2.1 算數運算符 36
3.2.2 關系運算符 37
3.2.3 邏輯運算符 37
3.2.4 位運算符 38
3.2.5 賦值運算符 38
3.3 本章小結 39
3.4 習題 39
第4章 流程控制 40
4.1 if條件判斷 40
4.1.1 if else基本結構 40
4.1.2 if判斷特殊寫法 40
4.2 for循環 41
4.2.1 for循環基本格式 41
4.2.2 無限循環 42
4.2.3 for range循環 42
4.2.4 break跳出循環 42
4.2.5 continue繼續下次循環 43
4.3 switch 43
4.4 goto label 45
4.5 break label 46
4.6 continue label 46
4.7 本章小結 46
4.8 習題 47
第5章 復合數據類型 48
5.1 Array 48
5.1.1 Array的定義 48
5.1.2 數組的初始化 48
5.1.3 訪問數組的元素 49
5.1.4 數組的遍歷 49
5.1.5 多維數組 50
5.1.6 數組是值類型 51
5.2 Slice 51
5.2.1 切片的定義 51
5.2.2 基于數組得到切片 52
5.2.3 make函數構造切片 52
5.2.4 切片的本質 53
5.2.5 切片不能直接比較 54
5.2.6 切片的拷貝賦值 54
5.2.7 切片的遍歷 54
5.2.8 使用append給切片追加元素 54
5.2.9 使用copy復制切片 56
5.2.10 刪除切片的元素 56
5.3 Map 57
5.3.1 Map定義 57
5.3.2 map基本使用 57
5.3.3 判斷鍵是否存在 57
5.3.4 map的遍歷 58
5.3.5 使用delete函數刪除鍵值對 58
5.4 本章小結 60
5.5 習題 60
第6章 函數 62
6.1 函數 62
6.1.1 函數定義 62
6.1.2 函數調用 62
6.1.3 函數參數 63
6.1.4 函數返回值 64
6.1.5 defer語句 64
6.2 函數進階 65
6.2.1 變量作用域 65
6.2.2 函數作為變量 66
6.2.3 匿名函數 67
6.3 閉包 67
6.3.1 閉包的定義 67
6.3.2 閉包的使用 67
6.4 常用內置函數 68
6.4.1 panic和recover 68
6.5 本章小結 70
6.6 習題 70
第7章 指針和包 71
7.1 指針 71
7.1.1 內存地址和指針類型 71
7.1.2 指針取值 71
7.2 new和make 72
7.2.1 new 73
7.2.2 make 73
7.3 包 74
7.3.1 包的定義 74
7.3.2 標識符的可見性 74
7.3.3 包的導入 75
7.3.4 自定義包名 75
7.3.5 init初始化函數 75
7.4 本章小結 76
7.5 習題 77
第8章 結構體 78
8.1 結構體 78
8.1.1 結構體定義 78
8.1.2 結構體實例化 79
8.1.3 匿名結構體 79
8.1.4 結構體指針 79
8.1.5 結構體初始化 80
8.1.6 構造函數 81
8.2 方法和接收者 81
8.2.1 方法 81
8.2.2 接收者 82
8.2.3 任意類型添加方法 83
8.3 結構體嵌套 84
8.3.1 結構體匿名字段 84
8.3.2 嵌套結構體 84
8.3.3 結構體繼承 86
8.4 結構體與JSON 87
8.4.1 結構體字段的可見性 87
8.4.2 結構體與JSON 87
8.4.3 結構體標簽 88
8.5 本章小結 89
8.6 習題 89
第9章 接口 90
9.1 接口類型 90
9.1.1 為什么要有接口 90
9.1.2 接口的定義 91
9.1.3 接口的實現 91
9.1.4 值接收者和指針接收者的區別 92
9.1.5 類型與接口的關系 93
9.1.6 接口的嵌套 95
9.2 空接口 95
9.2.1 空接口的定義 95
9.2.2 空接口的應用 96
9.2.3 類型斷言 97
9.3 本章小結 97
9.4 習題 98
第10章 反射 99
10.1 反射介紹 99
10.1.1 為什么要使用反射 99
10.2 reflect 99
10.2.1 reflect.Type 100
10.2.2 Type和Kind 100
10.2.3 reflect.ValueOf 102
10.2.4 結構體反射 103
10.3 反射是把雙刃劍 105
10.4 本章小結 105
10.5 習題 106
第11章 并發 107
11.1 什么是并發 107
11.1.1 并發與并行的區別 107
11.1.2 Go語言中的并發 107
11.2 goroutine 107
11.2.1 使用goroutine 107
11.2.2 sync.WaitGroup 108
11.2.3 啟動多個goroutine 109
11.3 goroutine與OS線程 109
11.3.1 goroutine使用可變的棧 109
11.3.2 goroutine由go的運行時調度 110
11.3.3 GOMAXPROCS 110
11.4 channel 111
11.4.1 channel介紹 111
11.4.2 聲明channel 111
11.4.3 初始化channel 111
11.4.4 channel操作 112
11.4.5 無緩沖通道 112
11.4.6 有緩沖通道 113
11.4.7 循環接收值 113
11.4.8 單向通道 114
11.4.9 select多路復用 115
11.5 并發安全和鎖 116
11.5.1 互斥鎖 116
11.5.2 讀寫互斥鎖 117
11.5.3 sync.Once 118
11.5.4 Sync.Map 119
11.6 本章小結 121
11.7 習題 121
第12章 網絡編程 122
12.1 互聯網協議 122
12.1.1 互聯網分層模型 122
12.1.2 物理層 123
12.1.3 數據鏈路層 123
12.1.4 網絡層 123
12.1.5 傳輸層 124
12.1.6 應用層 124
12.2 socket編程 125
12.2.1 socket圖解 125
12.3 Go語言實現TCP通信 126
12.3.1 TCP協議 126
12.3.2 TCP服務端 126
12.3.3 TCP客戶端 127
12.4 Go語言實現UDP通信 128
12.4.1 UDP協議 128
12.4.2 UDP服務端 128
12.4.3 UDP客戶端 129
12.5 Go語言實現HTTP通信 130
12.5.1 HTTP協議 130
12.5.2 HTTP客戶端 130
12.5.3 HTTP服務端 131
12.6 本章小結 131
12.7 習題 132
13 測試 133
13.1 go test 133
13.2 測試函數 133
13.2.1 測試函數格式 133
13.2.2 測試示例 134
13.2.3 測試組 137
13.2.4 子測試 138
13.2.5 測試覆蓋率 140
13.3 基準測試 141
13.3.1 基準測試函數格式 141
13.3.2 基準測試示例 142
13.3.3 性能比較函數 143
13.3.4 重置時間 145
13.3.5 并行測試 145
13.4 Setup與TearDown 146
13.4.1 TestMain 146
13.4.2 子測試的Setup與Teardown 146
13.5 示例函數 148
13.5.1 示例函數格式 148
13.5.2 示例函數示例 148
13.6 本章小結 149
13.7 習題 149
14 常用標準庫 150
14.1 fmt 150
14.1.1 輸出內容 150
14.1.2 格式化占位符 151
14.1.3 獲取輸入 155
14.2 time 157
14.2.1 時間類型 157
14.2.2 時間戳 158
14.2.3 時間間隔 158
14.2.4 時間操作 159
14.2.5 定時器 159
14.2.6 時間格式化 159
14.3 strconv 160
14.3.1 string與int類型轉換 160
14.3.2 Parse系列函數 160
14.3.3 Format系列函數 161
14.4 flag 162
14.4.1 os.Args 162
14.4.2 flag參數類型 163
14.4.3 定義flag參數 163
14.4.4 解析flag參數 163
14.4.5 flag包其他函數 164
14.4.6 完整示例 164
14.5 log 165
14.5.1 使用logger 165
14.5.2 配置logger 166
14.5.3 配置日志前綴 166
14.5.4 配置日志輸出位置 167
14.5.5 創建logger 167
14.6 文件操作 168
14.6.1 打開和關閉文件 168
14.6.2 讀取文件 168
14.6.3 bufio 170
14.6.4 ioutil 170
14.6.5 打開文件 171
14.6.6 Write和WriteString 171
14.6.7 bufio.NewWriter 172
14.6.8 ioutil.WriteFile 172
14.7 本章小結 172
14.8 習題 172
是時候去做成一件事了 174
書籍前言:
我與Go語言
我接觸Go語言是在2016年的時候,那時候我還在搜狗上班,當時我在工作中還是寫Python和JavaScript為主。一個偶然的機會接觸到Go語言,它作為一門靜態編譯型的語言,編譯之后幾乎無依賴的特點,深深地吸引了我,當時一下子就覺著這才是我想要的語言。
后來就開始慢慢學習Go語言了,并且嘗試著去編寫一些業務代碼。當時網上還沒有很多關于Go語言的學習資料,我記得我是在github上找到了一些網友自發翻譯的Go語言圣經,我拿著PDF去學院路的一家打印店花了20多塊錢打印了出來,從那以后上下班的地鐵上都是這本書陪著我。
后面我又在網上看了無聞的教學視頻,我記得有兩個系列一個是Go語言基礎,還有名庫講解,我也學到了很多。感謝無聞大大。
現在Go語言及其生態的發展已經越來越完善,越來越多的公司也選擇Go語言作為主開發語言,Go語言之所以能發展這么快,肯定離不開無數熱心的Gopher為Go社區做的貢獻。工作之余我也開始嘗試寫一些Go語言的博客,錄制一些Go語言的視頻教程,我也想給Go社區做一些自己力所能及的貢獻。
本書是我將之前發布在博客上的文章重新整理而成,希望能幫助到更多的Go語言初學者。但由于水平有限、并且時間倉促,書中難免有錯誤之處,如能得到您的寶貴建議,將感激不盡。
本書示例代碼及習題答案請加QQ群:1020441845索取。