本書涵蓋從Go語言入門到Go Web開發(fā)高級(jí)應(yīng)用所需的核心知識(shí)、方法和技巧,共分4篇。第1篇Go語言入門,介紹Go語言的基礎(chǔ)語法,即使是沒有Go語言基礎(chǔ)的讀者也可以學(xué)習(xí)本書。第2篇Go Web基礎(chǔ)入門,介紹能使讀者快速掌握用Go語言進(jìn)行Web開發(fā)的基礎(chǔ)知識(shí)。第3篇Go Web高級(jí)應(yīng)用,教會(huì)讀者用Go語言快速開發(fā)各種Web應(yīng)用。第4篇Go Web項(xiàng)目實(shí)戰(zhàn),通過實(shí)例介紹了開發(fā)一個(gè)B2C電子商務(wù)系統(tǒng)的全過程,并用Docker部署Go Web應(yīng)用。本書可作為Go語言初學(xué)者、Web開發(fā)工程師的自學(xué)用書,也可作為培訓(xùn)機(jī)構(gòu)和相關(guān)院校的教材。
廖顯東高級(jí)軟件架構(gòu)師,全棧開發(fā)者,AI算法專家:技術(shù)極客,開源愛好者。專注于計(jì)算機(jī)前沿技術(shù)的研究和實(shí)踐。有多年軟件開發(fā)與團(tuán)隊(duì)管理經(jīng)驗(yàn),精通Java、JavaScript、C/C /C#、Python、PHP等開發(fā)語言。對Go語言、Rust語言等流行開發(fā)語言有深入實(shí)踐和研究。對大型電子商務(wù)系統(tǒng)開發(fā)、高并發(fā)架構(gòu)、分布式架構(gòu)、算法及應(yīng)用、微服務(wù)、大數(shù)據(jù)、人工智能算法、Web3.0、AIGC、ChatGPT、Midjoumey、元宇宙等計(jì)算機(jī)前沿技術(shù)領(lǐng)域有深入實(shí)踐和研究。
第1篇 Go語言入門
//
第1章 Go基礎(chǔ)入門2
1.1 安裝Go2
1.2 【實(shí)戰(zhàn)】開啟Go的第一個(gè)程序4
1.2.1 聲明包5
1.2.2 導(dǎo)入包5
1.2.3 main()函數(shù)6
1.3 Go基礎(chǔ)語法與使用7
1.3.1 基礎(chǔ)語法7
1.3.2 變量10
1.3.3 常量13
1.3.4 運(yùn)算符15
1.3.5 流程控制語句16
1.4 Go數(shù)據(jù)類型26
1.4.1 布爾類型27
1.4.2 數(shù)字類型29
1.4.3 字符串類型29
1.4.4 指針類型34
1.4.5 復(fù)合類型35
1.5 函數(shù)44
1.5.1 聲明函數(shù)44
1.5.2 函數(shù)參數(shù)45
1.5.3 匿名函數(shù)47
1.5.4 迭代器函數(shù)49
1.5.5 defer延遲語句50
1.6 Go面向?qū)ο缶幊?2
1.6.1 封裝52
1.6.2 繼承54
1.6.3 多態(tài)56
1.7 接口57
1.7.1 接口的定義57
1.7.2 接口的賦值58
1.7.3 接口的查詢61
1.7.4 接口的組合62
1.8 反射63
1.8.1 反射的定義63
1.8.2 反射的三大法則64
1.9 泛型65
1.10 goroutine簡介68
1.11 單元測試69
1.12 模塊系統(tǒng)72
1.13 Go編譯與工具75
1.13.1 編譯(go build)75
1.13.2 編譯后運(yùn)行(go run)81
1.13.3 編譯并安裝(go install)81
1.13.4 獲取代碼(go get)82
//
第2篇 Go Web基礎(chǔ)入門
//
第2章 Go Web開發(fā)基礎(chǔ)86
2.1 【實(shí)戰(zhàn)】開啟Go Web的第1個(gè)程序86
2.2 Web應(yīng)用程序運(yùn)行原理簡介87
2.2.1 Web基本原理87
2.2.2 Web應(yīng)用程序的組成88
2.3 【實(shí)戰(zhàn)】初探Go語言的net/http包90
2.3.1 創(chuàng)建簡單的服務(wù)器端91
2.3.2 創(chuàng)建簡單的客戶端92
2.4 使用Go語言的html/template包94
2.4.1 了解模板的原理94
2.4.2 使用html/template包95
第3章 接收和處理Go Web請求101
3.1 【實(shí)戰(zhàn)】創(chuàng)建一個(gè)簡單的Go Web服務(wù)器101
3.2 接收請求103
3.2.1 ServeMux和DefaultServeMux103
3.2.2 處理器和處理器函數(shù)111
3.2.3 串聯(lián)多個(gè)處理器和處理器函數(shù)114
3.2.4 生成HTML表單115
3.3 處理請求117
3.3.1 了解Request結(jié)構(gòu)體117
3.3.2 請求URL118
3.3.3 請求頭119
3.3.4 請求體120
3.3.5 處理HTML表單121
3.3.6 了解ResponseWriter的原理124
3.4 了解session和cookie129
3.4.1 session和cookie簡介129
3.4.2 Go與cookie132
3.4.3 Go使用session134
//
第4章 用Go訪問數(shù)據(jù)庫139
4.1 MySQL的安裝及使用139
4.1.1 MySQL簡介139
4.1.2 MySQL的安裝139
4.1.3 用Go訪問MySQL140
4.2 Redis的安裝及使用146
4.2.1 Redis的安裝146
4.2.2 Go訪問Redis147
4.3 MongoDB的安裝及使用151
4.3.1 MongoDB的安裝151
4.3.2 Go訪問MongoDB152
4.4 Go的常見ORM庫159
4.4.1 什么是ORM159
4.4.2 Gorm(性能極好的ORM庫)的安裝及使用160
4.4.3 Beego ORM?D?DGo語言的ORM框架164
//
第3篇 Go Web高級(jí)應(yīng)用
//
第5章 Go高級(jí)網(wǎng)絡(luò)編程170
5.1 Go Socket編程170
5.1.1 什么是Socket170
5.1.2 客戶端net.Dial()函數(shù)的使用173
5.1.3 客戶端net.DialTCP()函數(shù)的使用174
5.1.4 UDP Socket的使用177
5.1.5 【實(shí)戰(zhàn)】用Go Socket實(shí)現(xiàn)一個(gè)簡易的聊天程序180
5.2 Go RPC編程184
5.2.1 什么是RPC184
5.2.2 Go RPC的應(yīng)用185
5.3 微服務(wù)191
5.3.1 什么是微服務(wù)191
5.3.2 【實(shí)戰(zhàn)】用gRPC框架構(gòu)建一個(gè)簡易的微服務(wù)194
//
第6章 Go文件處理200
6.1 操作目錄與文件200
6.1.1 操作目錄200
6.1.2 創(chuàng)建文件201
6.1.3 打開與關(guān)閉文件201
6.1.4 讀寫文件202
6.1.5 移動(dòng)與重命名文件203
6.1.6 刪除文件203
6.1.7 復(fù)制文件204
6.1.8 修改文件權(quán)限204
6.1.9 文件鏈接206
6.1.10 嵌入靜態(tài)文件206
6.2 處理XML文件208
6.2.1 解析XML文件208
6.2.2 生成XML文件210
6.3 處理JSON文件212
6.3.1 讀取JSON文件212
6.3.2 生成JSON文件214
6.4 處理正則表達(dá)式215
6.4.1 獲取正則對象215
6.4.2 匹配檢測216
6.4.3 查找字符和字符串216
6.4.4 查找匹配位置217
6.4.5 替換字符218
6.4.6 分割字符串219
6.5 【實(shí)戰(zhàn)】從數(shù)據(jù)庫中導(dǎo)出一個(gè)CSV文件220
//
第7章 Go并發(fā)編程223
7.1 并發(fā)與并行223
7.2 進(jìn)程、線程和協(xié)程225
7.3 Go并發(fā)模型簡介227
7.4 用goroutine和通道實(shí)現(xiàn)并發(fā)228
7.4.1 goroutine簡介228
7.4.2 通道229
7.5 用sync包實(shí)現(xiàn)并發(fā)233
7.5.1 競態(tài)233
7.5.2 互斥鎖234
7.5.3 讀寫互斥鎖235
7.5.4 sync.Once結(jié)構(gòu)體236
7.5.5 同步等待組sync.WaitGroup238
7.5.6 競態(tài)檢測器240
7.5.7 sync/atomic 包擴(kuò)展241
7.6 用Go開發(fā)并發(fā)的Web應(yīng)用243
7.6.1 【實(shí)戰(zhàn)】開發(fā)一個(gè)自增整數(shù)生成器243
7.6.2 【實(shí)戰(zhàn)】開發(fā)一個(gè)并發(fā)的消息發(fā)送器243
7.6.3 【實(shí)戰(zhàn)】開發(fā)一個(gè)多路合并計(jì)算器244
7.6.4 【實(shí)戰(zhàn)】用select關(guān)鍵字創(chuàng)建多通道監(jiān)聽器245
7.6.5 【實(shí)戰(zhàn)】用無緩沖通道阻塞主線247
7.6.6 【實(shí)戰(zhàn)】用篩法求素?cái)?shù)248
7.6.7 【實(shí)戰(zhàn)】創(chuàng)建隨機(jī)數(shù)生成器249
7.6.8 【實(shí)戰(zhàn)】創(chuàng)建一個(gè)定時(shí)器250
7.6.9 【實(shí)戰(zhàn)】開發(fā)一個(gè)并發(fā)的Web爬蟲251
//
第8章 Go RESTful API開發(fā)255
8.1 什么是RESTful API255
8.2 Go流行Web框架的使用257
8.2.1 為什么要用框架257
8.2.2 Gin框架的使用257
8.2.3 Beego框架的使用264
8.3 【實(shí)戰(zhàn)】用Gin框架開發(fā)RESTful API276
8.3.1 路由設(shè)計(jì)276
8.3.2 數(shù)據(jù)表設(shè)計(jì)276
8.3.3 模型代碼編寫276
8.3.4 邏輯代碼編寫277
8.4 【實(shí)戰(zhàn)】用Go開發(fā)OAuth 2.0接口279
8.4.1 OAuth 2.0簡介279
8.4.2 用Go開發(fā)OAuth 2.0接口的示例281
//
第4篇 Go Web項(xiàng)目實(shí)戰(zhàn)
//
第9章 【實(shí)戰(zhàn)】開發(fā)一個(gè)B2C電子商務(wù)系統(tǒng)286
9.1 需求分析286
9.2 系統(tǒng)設(shè)計(jì)287
9.2.1 確定系統(tǒng)架構(gòu)287
9.2.2 制定系統(tǒng)流程288
9.3 設(shè)計(jì)軟件架構(gòu)289
9.4 設(shè)計(jì)數(shù)據(jù)庫與數(shù)據(jù)表290
9.5 搭建系統(tǒng)基礎(chǔ)架構(gòu)291
9.5.1 創(chuàng)建公共文件291
9.5.2 創(chuàng)建模型295
9.6 前臺(tái)模塊開發(fā)299
9.6.1 首頁模塊開發(fā)299
9.6.2 注冊登錄模塊開發(fā)306
9.6.3 用戶中心模塊開發(fā)314
9.6.4 購物車模塊開發(fā)317
9.6.5 收銀臺(tái)模塊開發(fā)320
9.6.6 支付模塊開發(fā)322
9.7 后臺(tái)模塊開發(fā)325
9.7.1 登錄模塊開發(fā)326
9.7.2 商品模塊開發(fā)326
//
第10章 用Docker部署Go Web應(yīng)用329
10.1 了解Docker組件及原理329
10.1.1 什么是Docker329
10.1.2 為什么用Docker330
10.1.3 Docker引擎331
10.1.4 Docker構(gòu)架332
10.1.5 Docker核心概念332
10.2 安裝Docker333
10.3 【實(shí)戰(zhàn)】用Docker運(yùn)行一個(gè)Go Web應(yīng)用335
10.3.1 創(chuàng)建Go Web應(yīng)用335
10.3.2 用Docker運(yùn)行Go Web應(yīng)用335
10.4 【實(shí)戰(zhàn)】通過Docker-Compose部署容器集群336
10.4.1 Docker-Compose簡介337
10.4.2 通過Docker-Compose實(shí)戰(zhàn)部署337
10.5 【實(shí)戰(zhàn)】將Docker容器推送至服務(wù)器339
10.5.1 在Docker Hub官網(wǎng)注冊賬號(hào)339
10.5.2 同步本地和Docker Hub的標(biāo)簽(tag)339
10.5.3 推送鏡像到Docker Hub340
10.5.4 訪問Docker Hub鏡像340
10.5.5 使用發(fā)布的Docker Hub鏡像341