Go Web編程實戰派——從入門到精通 ( 簡體 字) |
作者:廖顯東 | 類別:1. -> 程式設計 -> Go語言 |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 54420 詢問書籍請說出此書號!【有庫存】 NT售價: 640 元 |
出版日:4/1/2021 |
頁數:536 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121408007 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:序
一
回望時光,從2009年11月 Go語言第一個版本發布時起,我就開始持續關注Go語言。當時是因為Go語言是Google公司開發的一門語言,所以我便格外關注。結果,從看到Go語言的第一天起,我就被這門語言深深吸引了。
畢業后我進入蘇寧易購從事軟件開發,在平時工作中,使用Java和PHP編程居多。后來公司的一些項目開發也陸續使用過Python、C#等開發語言。對比之下,Go語言更加簡潔、高效、優雅。所以在工作之余,我一直在學習研究Go語言,并嘗試開發了一些小項目。
2015年8月Go 1.5發布,這個版本被認為是歷史性的。完全移除C語言部分,實現Go語言自舉,這讓我真正地意識到Go語言在未來有可能取代C語言。恰好公司的項目開始嘗試用Go語言進行重構,從此我開始深度使用Go語言進行項目實戰開發。在使用Go語言重構之后,我們公司的開發效率得到了極大的提升。
二
由于喜歡開源,從2009年至今,我研究了大量的開源代碼,其中包括Java、PHP、Python、Go、Rust、Docker、Vue、Spring、Flutter等各種流行的源碼,并將一些心得在我的個人博客上面發表。后來我也創立了個人公眾號“源碼大數據”來將好的算法、流行的框架和代碼進行分享。遺憾的是由于這幾年平時比較忙,公眾號很少打理。(之后我會花更多時間來分享精品知識和源碼,感興趣的讀者可以關注一下。)
近幾年我在工作之余編寫了大量Go語言開源項目,并發布其中一小部分到碼云和GitHub上,其中有代表性的是:(1)Go支付合集;(2)Go漢語拼音合集包;(3)Go驗證碼合集;(4)PHP微信支付合集;(5)Go-WiFi智能插頭。讀者可以去GitHub網站上按名稱搜索。
三
由于我的部分Go語言開源項目深受Go語言社區的歡迎,加上市場上關于Go Web開發的書很少,且書中很少有實戰的知識。所以我想寫一本Go語言實戰方面的書來回饋Go語言社區的朋友們,也希望給更多的人以幫助。于是,2019年下半年我便在工作之余開啟了本書的寫作之旅。
到了2020年,由于公司項目比較緊,寫書的事便一直擱淺。直到2020年7月,電子工業出版社的吳宏偉編輯找到我,邀請我寫書。恰好正在寫第2章,我想這應該是和吳宏偉編輯有緣吧,便欣然答應。從此我開始舍棄的業余時間,全力寫作。
特別感謝吳宏偉編輯,在我寫書過程中他提出了許多寶貴的意見和建議,并和我反復溝通、修改。經過反復修改打磨,咬文嚼字,本書才得以完稿。
四
特別感謝Go語言社區的所有的貢獻者,沒有他們的無私奉獻,就沒有Go語言社區的繁榮。僅以此書獻給所有喜歡Go語言的朋友們。
最后,我要感謝對我20多年的學習生涯產生重要影響的老師、長輩和家人,沒有他們的影響,我就不會寫出這本書。
感謝我的秀安叔叔,他的求知精神深深影響到我,同時他的書法和繪畫作品對我影響也很大。是他在我9歲時,告訴我只有讀書才能改變我的命運,讓我從此更加專注于學習。
感謝廖邦遐先生,他花費近10年主持編撰出了近800頁的《廖氏宗譜》,讓我很敬佩,也讓我堅定了寫作本書的決心。
感謝我從幼兒園到大學的所有的老師,是他們把我帶進知識的神圣殿堂。包括丁年平老師、趙廣成老師、侯春燕老師、譚聯舉老師、黃向黨老師、陳代全老師、孟祥斌博士、祁曉玲教授等對我的學習和思維方式都產生了很大的影響。
特別感謝侯紅錦老師,是她開啟我英語學習生涯,讓我愛上英語。是她無微不至的關心和幫助,開啟我求知的熱情,我希望我永遠是她的驕傲。
特別感謝高中班主任兼語文老師任佑平老師,他的敬業精神深深地讓我敬佩。他在我們高中畢業時,贈送我們班的同學每人一本《老人與海》,教會我要勇敢地面對社會的大浪。
感謝我的姐姐秋林,小時候她教我識字、陪我學習,共同進步,對我小時候的學習和思維產生了重要影響。
感謝我的爸爸秀剛、媽媽克平。生為農民的他們,有著中國農民最樸質的勤勞精神。他們生我養我,20年如一日,送我讀完大學,在我心中他們很偉大。
感謝我的妻子清荷,我的知音知己。學漢語言文學的她讓我熟讀各種文學著作,也因此愛上寫作。在她的影響下,我熟讀《道德經》等經典文學著作,讓我在展翅翱翔的同時懂得保持謙卑和知進退。在我寫作期間,是她在背后默默地支持和付出,才使得這本書能夠順利完稿。
廖顯東
2021.01.15 于成都
/////
前言
Go語言是Google于2009年開源的一門編程語言。它可以在不損失應用程序性能的情況下極大地降低代碼的復雜性。相比于其他編程語言,簡潔、快速、安全、并行、有趣、開源、內存管理、數組安全、編譯迅速是其特色。
Go語言在設計之初就被定位為“運行在Web服務器、存儲集群或類似用途的巨型中央服務器中的系統編程語言”,在云計算、Web高并發開發領域中具有無可比擬的優勢。Go語言在高性能分布式系統、服務器編程、分布式系統開發、云平臺開發、區塊鏈開發等領域有著廣泛使用。
近幾年,很多公司(特別是云計算公司)開始用Go重構他們的基礎架構,也有很多公司直接采用Go進行業務開發。Docker、Kubernetes等重量級應用的持續火熱,更是讓Go語言成為當下最熱門編程語言之一。
1. 本書特色
本書聚焦Go Web開發領域,對Go Web知識進行全面深入地講解。本書有如下特色:
(1)一線技術,突出實戰。
本書中穿插了大量的實戰內容,且所有代碼采用目前的Go最新版本(1.15.3)編寫。
(2)精雕細琢,閱讀性強。
全書的語言經過多次打磨,力求精確。同時注重閱讀體驗,讓沒有任何基礎的讀者也可以很輕松地讀懂本書。
(3)零基礎入門,循序漸進,讓讀者快速從菜鳥向實戰高手邁進。
本書以Go入門級程序員為主要對象,初級、中級、高級程序員都可以從書中學到干貨。先介紹Go的基礎,然后介紹Go Web的基礎,介紹Go Web的高級應用,介紹B2C電子商務系統實戰開發,最后介紹應用的Docker實戰部署,真正幫助讀者從基礎入門向開發高手邁進。
(4)極客思維,極致效率;
本書以極客思維深入Go語言底層進行探究,幫助讀者了解底層的原理。全書言簡意賅,以幫助讀者提升開發效率為導向,同時盡可能幫助讀者縮短閱讀本書的時間。
(5)由易到難,重點和難點標注并重點解析。
本書編排由易到難,內容基本覆蓋Go Web的主流前沿技術。同時對重點和難點進行重點講解,對易錯點和注意點進行了提示說明,幫助讀者克服學習過程中的困難。
(6)突出實戰,快速突擊。
本書的實例代碼絕大部分都是來自于最新的企業實戰項目。購買本書的讀者可以通過網絡下載書中的所有的源代碼,下載后即可運行,通過實踐來加深理解。
(7)實戰方案,可直接二次開發進行實戰部署。
本書以實戰為主,所有的示例代碼拿來即可運行。特別是第9章,購買本書的讀者可以直接獲得B2C電子商務系統的全部源代碼。可以直接對其進行二次開發,用于自己的項目。讀者購買本書不僅可以學習本書的各種知識,也相當于購買一個最新版的Go語言電商系統解決方案及項目源碼。
2. 閱讀本書,您能學到什么
? 系統學習Go語言基礎語法;
? 掌握HTTP基本原理;
? 掌握Go Web 底層原理;
? 掌握Go訪問MySQL、Redis、MongoDB的方法和技巧;
? 掌握Gorm、Beego ORM的使用方法和技巧;
? 掌握Go Socket編程的方法和技巧;
? 掌握用gRPC實現微服務調用;
? 掌握Go 文件處理的方法和技巧;
? 掌握Go生成與解析JSON、XML文件的方法和技巧;
? 掌握Go正則表達式的處理方法和技巧;
? 掌握Go 日志處理的方法和技巧;
? 掌握從數據庫中導出一個CSV文件的實戰法;
? 掌握Go并發編程的底層原理;
? 掌握常見Go并發Web應用的實戰開發方法和技巧;
? 掌握Go開發并發的Web爬蟲的方法和技巧;
? 掌握Gin框架、Beego框架的使用方法和技巧;
? 掌握流行架構風格RESTful API接口的開發;
? 掌握用Go開發OAuth2.0接口的技巧;
? 掌握Elasticsearch的使用方法;
? 掌握微信支付、支付寶支付的接口對接方法;
? 掌握用Go語言開發B2C電子商務系統的整個流程方案及源碼;
? 掌握Docker實戰部署方法;
? 掌握Docker Compose實戰部署方法。
希望通過本書的學習,能夠讓讀者快速、系統地掌握Go Web開發的各種方法和技巧,幫助讀者在Go 語言Web開發中,快速從基礎入門向精通級的實戰派高手邁進。
3. 讀者對象
本書既適合Go語言初學者,也適合想進一步提升的中高級Go語言開發者。初級、中級、高級開發人員都能從本書學到干貨。
本書讀者對象如下:
初學編程的自學者; 培訓機構的老師和學員;
Go語言初學者; 相關專業的大學畢業學生;
Go語言中高級開發人員; Web前端開發人員;
Web開發工程師; 測試工程師;
編程愛好者; DevOps運維人員;
高等院校的老師和學生; Web中高級開發人員。
4. 技術交流
如果讀者在閱讀本書的過程中有任何疑問,請用手機微信掃描右側的二維碼,關注“源碼大數據”公眾號,輸入讀者遇到的問題,作者會盡快與讀者進行交流及回復。
關注“源碼大數據”公眾號后輸入“go web源碼”,即可獲得本書源代碼、學習資源、面試題庫等。
讀者也可以加入QQ群(QQ群號碼:771844527)進行交流溝通,作者會盡快進行回復。
盡管作者在本書寫作過程中盡可能地追求嚴謹,但仍難免有紕漏之處,歡迎讀者通過“源碼大數據”公眾號或者QQ群等方式批評與指正。
廖顯東 |
內容簡介:本書涵蓋從Go語言入門到Go Web開發高手所需的核心知識、方法和技巧,共分4篇。第1篇“Go語言入門”,介紹Go語言的基礎語法,既使沒有Go語言基礎的讀者也可以學習本書。第2篇“Go Web基礎入門”,包括3章:Go Web開發基礎、接收和處理Go Web請求、用Go訪問數據庫。本篇能使讀者快速掌握用Go語言進行Web開發的基礎知識。第3篇“Go Web高級應用”,包括4章:Go高級網絡編程、Go文件處理、Go并發編程、Go RESTful API接口開發。本篇能使讀者用Go語言快速開發各種Web應用。第4篇“Go Web項目實戰”,包括2章:【實戰】開發一個B2C電子商務系統、【實戰】用Docker部署Go Web應用。本篇通過實例介紹了開發一個B2C電子商務系統的全過程,包括開發商品展示、購物車、結算、支付等模塊的詳細講解,讓讀者真正了解大型B2C電子商務系統的架構原理及實現方法,并開放了源代碼;用Docker實戰部署Go Web應用,幫助讀者向Go Web開發“精通”級別邁進。本書可作為Go語言初學者、Web開發工程師的自學用書,也可作為培訓機構和相關院校的教材。 |
目錄:第1篇 Go語言入門
第1章 Go基礎入門 2
1.1 安裝Go 2
1.2 【實戰】開啟Go的第一個程序 5
1.3 Go基礎語法與使用 8
1.4 Go數據類型 29
1.5 函數 52
1.6 Go面向對象編程 63
1.7 接口 68
1.8 反射 75
1.9 goroutine簡介 80
1.10 單元測試 81
1.11 Go編譯與工具 83
1.12 小結 91
第2篇 Go Web基礎入門
第2章 Go Web開發基礎 94
2.1 【實戰】開啟Go Web的第1個程序 94
2.2 Web程序運行原理簡介 95
2.2.1 Web基本原理 95
2.2.2 HTTP簡介 97
2.2.3 HTTP請求 97
2.2.4 HTTP響應 100
2.2.5 URI與URL 104
2.2.6 HTTPS簡介 106
2.2.7 HTTP 2簡介 106
2.2.8 Web應用程序的組成 108
2.3 【實戰】初探Go語言的net/http包 110
2.3.1 創建簡單的服務器端 110
2.3.2 創建簡單的客戶端 114
2.4 使用Go語言的html/template包 118
2.4.1 了解模板原理 118
2.4.2 使用html/template包 120
2.5 小結 131
第3章 接收和處理Go Web請求 132
3.1 【實戰】創建一個簡單的Go Web服務器 132
3.2 接收請求 134
3.2.1 ServeMux和DefaultServeMux 134
3.2.2 處理器和處理器函數 146
3.2.3 串聯多個處理器和處理器函數 150
3.2.4 構建模型 151
3.2.5 生成HTML表單 153
3.3 處理請求 155
3.3.1 了解Request結構體 155
3.3.2 請求URL 158
3.3.3 請求頭 159
3.3.4 請求體 160
3.3.5 處理HTML表單 161
3.3.6 了解ResponseWriter原理 164
3.4 了解session和cookie 171
3.4.1 session和cookie的簡介 171
3.4.2 Go與cookie 173
3.4.3 Go使用session 176
3.5 小結 181
第4章 用Go訪問數據庫 182
4.1 MySQL的安裝及使用 182
4.1.1 MySQL簡介 182
4.1.2 MySQL的安裝 183
4.1.3 MySQL基礎入門 183
4.1.4 用Go訪問MySQL 193
4.2 Redis的安裝及使用 203
4.2.1 Redis的安裝 203
4.2.2 Redis基礎入門 203
4.2.3 Go訪問Redis 208
4.3 MongoDB的安裝及使用 216
4.3.1 MongoDB的安裝 216
4.3.2 MongoDB基礎入門 217
4.3.3 Go訪問MongoDB 223
4.4 Go的常見ORM庫 237
4.4.1 什么是ORM 237
4.4.2 Gorm(性能極好的ORM庫)的安裝及使用 238
4.4.3 Beego ORM——Go語言的ORM框架 242
4.5 小結 247
第3篇 Go Web高級應用
第5章 Go高級網絡編程 250
5.1 Go Socket編程 250
5.1.1 什么是Socket 250
5.1.2 客戶端Dial()函數的使用 254
5.1.3 客戶端DialTCP()函數的使用 256
5.1.4 UDP Socket的使用 261
5.1.5 【實戰】用Go Socket實現一個簡易的聊天程序 265
5.2 Go RPC編程 270
5.2.1 什么是RPC 270
5.2.2 Go RPC的應用 271
5.3 微服務 277
5.3.1 什么是微服務 277
5.3.2 【實戰】用gRPC框架構建一個簡易的微服務 281
5.4 小結 286
第6章 Go文件處理 287
6.1 操作目錄與文件 287
6.1.1 操作目錄 287
6.1.2 創建文件 292
6.1.3 打開與關閉文件 293
6.1.4 讀寫文件 294
6.1.5 移動與重命名文件 299
6.1.6 刪除文件 299
6.1.7 復制文件 301
6.1.8 修改文件權限 304
6.1.9 文件鏈接 306
6.2 處理 XML 文件 307
6.2.1 解析XML文件 307
6.2.2 生成XML文件 310
6.3 處理JSON 文件 313
6.3.1 讀取JSON文件 313
6.3.2 生成JSON文件 315
6.4 處理正則表達式 316
6.4.1 正則表達式簡介 316
6.4.2 使用Go正則表達式 322
6.5 【實戰】從數據庫中導出一個CSV文件 329
6.6 處理Go日志記錄 332
6.7 小結 335
第7章 Go并發編程 336
7.1 并發與并行 336
7.2 進程、線程和協程 338
7.3 Go并發模型簡介 340
7.4 用goroutine和通道實現并發 341
7.4.1 goroutine簡介 341
7.4.2 通道 343
7.5 用sync包實現并發 351
7.5.1 競態 351
7.5.2 互斥鎖 352
7.5.3 讀寫互斥鎖 354
7.5.4 sync.Once結構體 358
7.5.5 同步等待組sync.WaitGroup 361
7.5.6 競態檢測器 364
7.6 用Go開發并發的Web應用 366
7.6.1 【實戰】開發一個自增整數生成器 366
7.6.2 【實戰】開發一個并發的消息發送器 366
7.6.3 【實戰】開發一個多路復合計算器 367
7.6.4 【實戰】用select關鍵字創建多通道監聽器 368
7.6.5 【實戰】用無緩沖通道阻塞主線 370
7.6.6 【實戰】用篩法求素數 371
7.6.7 【實戰】創建隨機數生成器 372
7.6.8 【實戰】創建一個定時器 373
7.6.9 【實戰】開發一個并發的Web爬蟲 374
7.7 小結 377
第8章 Go RESTful API接口開發 378
8.1 什么是RESTful API 378
8.2 Go流行Web框架的使用 382
8.2.1 為什么要用框架 382
8.2.2 Gin框架的使用 382
8.2.3 Beego框架的使用 395
8.3 【實戰】用Gin框架開發RESTful API 412
8.3.1 路由設計 412
8.3.2 數據表設計 412
8.3.3 模型代碼編寫 412
8.3.4 邏輯代碼編寫 413
8.4 【實戰】用Go開發OAuth 2.0接口 417
8.4.1 OAuth 2.0簡介 417
8.4.2 用Go開發OAuth 2.0接口的示例 418
8.5 小結 423
第4篇 Go Web項目實戰
第9章 【實戰】開發一個B2C電子商務系統 426
9.1 需求分析 426
9.2 系統設計 427
9.2.1 確定系統架構 427
9.2.2 制定系統流程 428
9.3 設計軟件架構 429
9.4 設計數據庫與數據表 430
9.5 搭建系統基礎架構 431
9.6 前臺模塊開發 441
9.6.1 首頁模塊開發 443
9.6.2 注冊登錄模塊開發 450
9.6.3 用戶中心模塊開發 463
9.6.4 商品展示模塊開發 469
9.6.5 購物車模塊開發 474
9.6.6 收銀臺模塊開發 481
9.6.7 支付模塊開發 489
9.7 后臺模塊開發 493
9.7.1 登錄模塊開發 493
9.7.2 商品模塊開發 495
9.8 小結 499
第10章 用Docker部署Go Web應用 500
10.1 了解Docker組件及原理 500
10.1.1 什么是Docker 500
10.1.2 為什么用Docker 502
10.1.3 Docker引擎 502
10.1.4 Docker構架 503
10.1.5 Docker核心概念 503
10.1.6 Docker常用命令 504
10.2 安裝Docker 509
10.2.1 Linux Docker 安裝 509
10.2.2 Windows Docker 安裝 510
10.2.3 Mac OS X Docker 安裝 511
10.3 【實戰】用Docker運行一個Go Web 應用程序 512
10.3.1 為什么使用Docker運行Go Web應用程序 512
10.3.2 創建Go Web應用程序 512
10.3.3 用Docker運行一個Go Web應用程序 513
10.4 【實戰】通過Docker-Compose快速部署 515
10.4.1 Docker-Compose 簡介 515
10.4.2 通過Docker-Compose實戰部署 516
10.5 【實戰】將Docker容器推送至服務器 520
10.5.1 到Docker Hub官網注冊賬號 520
10.5.2 同步本地和Docker hub的標簽(tag) 520
10.5.3 推送鏡像到Docker Hub 521
10.5.4 訪問Docker Hub鏡像 521
10.5.5 使用發布的Docker Hub鏡像 522
10.6 小結 523 |
序: |