Web開發新選擇!和C/C++一樣強大簡潔,比Node.js好學易懂,比Php高效快速,開發Web程式一起Go!
市面上這麼多程式語言,從大家一定要學的Java/C/C++/C#,一直到非常流行的Python,Javascript等。想學Web開發,雖然什麼語言都行,但現今Web的架構十分複雜,再加上企業對程式設計師「全端」的能力、「快速開發」能力、「DevOps」能力的要求甚高,一個Web程式語言要面面俱到的確有難度。
曾經我們一直以為Go是專注在區塊鍊開發的程式語言,在開發Web時並不會列入我們的考量,大部分的初學者想到的就是Php,稍微有經驗的開發者會考慮Node.js或是Rails這種較大型的開發框架,但曾幾何時,Go以及其Web框架Beego/Gin已經慢慢成為主流了。
本書是市面上難得將Go從頭到尾說明完整清楚的參考書,如果你已經有程式開發經驗,這個類似精簡快速的C語言,會讓你重新享用C高速開發的樂趣,而成品也禁得起大型企業網站的考驗。而最流行的Docker佈署,本書也有一章完整的介紹,從了解Go語言本身,Web框架,ORM資料庫連結(包括了NoSQL)、最後到Docker佈署,一氣呵成,Web開發就靠他了。
▍適合讀者
本書既適合Go 語言初學者,也適合想進一步提升的中進階Go 語言開發者。初級、中級、高級開發人員都能從本書學到好料。
本書適合讀者群如下:
●初學程式設計的自學者;
●Go 語言初學者;
●Go 語言中進階開發人員;
●Web 開發工程師;
●程式設計同好;
●大專院校的老師和學生;
●教育訓練機構的老師和學員;
●Web 前端開發人員;
●測試工程師;
●DevOps 運行維護人員;
●Web 中進階開發人員。
本書特色
(1)第一線技術,突出實戰。
本書中穿插了大量的實戰內容,且所有程式採用目前的Go 最新版本編寫。
(2)精雕細琢,閱讀性強。
全書的語言經過多次打磨,力求精確。同時注重閱讀體驗,讓沒有任何基礎的讀者也可以很輕鬆地讀懂本書。
(3)零基礎入門,循序漸進,讓讀者快速從菜鳥向實戰高手邁進。
本書以Go 入門級程式設計師為主要物件,初級、中級、進階程式設計師都可以從書中學到知識。先介紹Go 的基礎,然後介紹Go Web 的基礎,介紹Go Web 的進階應用,介紹B2C 電子商務系統實戰開發,最後介紹應用的Docker 實戰部署,真正幫助讀者從基礎入門向開發高手邁進。
(4)極客思維,極致效率。
本書以極客思維深入Go 語言底層進行探究,幫助讀者了解底層的原理。全書言簡意賅,以幫助讀者提升開發效率為導向,同時盡可能幫助讀者縮短閱讀本書的時間。
(5)由易到難,重點和困難標注並重點解析。
本書編排由易到難,內容基本覆蓋Go Web 的主流前端技術。同時對重點和困難進行重點講解,對易錯點和注意點進行了提示說明,幫助讀者克服學習過程中的困難。
(6)突出實戰,快速突擊。
本書的實例程式絕大部分都是來自最新的企業實戰項目。購買本書的讀者可以透過本出版社官網下載書中的原始程式碼,下載後即可運行,透過實踐來加深了解。
(7)實戰方案,可直接延伸開發進行實戰部署。
本書以實戰為主,所有的範例程式拿來即可運行。特別是第9 章,購買本書的讀者可以直接獲得B2C 電子商務系統的全部原始程式碼。可以直接延伸開發,用於自己的項目。讀者購買本書不僅可以學習本書的各種知識,也相當於購買一個最新版的Go 語言電子商務系統解決方案及專案原始程式。
作者
廖顯東
高級軟體架構師,全棧開發者,技術極客,Gopher,開源愛好者。
具有多年軟體發展與團隊管理經驗,精通Java、JavaScript、C、C++、C#、Python、PHP等開發語言。對Go、Rust等開發語言有深入實踐和研究。對大型電子商務系統開發、高併發架構、分散式架構、微服務、大資料、人工智慧演算法等領域有深入實踐和研究。
目錄
第1 篇Go 語言入門
01 Go 基礎入門
1.1 安裝Go
1.2 【實戰】開啟Go 的第一個程式
1.3 Go 基礎語法與使用
1.4 Go 資料類型
1.5 函數
1.6 Go 物件導向程式設計
1.7 介面
1.8 反射
1.9 goroutine 簡介
1.10 單元測試
1.11 Go 編譯與工具
1.12 小結
第2 篇Go Web 基礎入門
02 Go Web 開發基礎
2.1 【實戰】開啟Go Web 的第1 個程式
2.2 Web 程式執行原理簡介
2.3 【實戰】初探Go 語言的net/HTTP 封包
2.4 使用Go 語言的html/template 套件
2.5 小結
03 接收和處理Go Web請求
3.1 【實戰】創建一個簡單的Go Web 伺服器
3.2 接收請求
3.3 處理請求
3.4 了解session 和cookie
3.5 小結
04 用Go 存取資料庫
4.1 MySQL 的安裝及使用
4.2 Redis 的安裝及使用
4.3 MongoDB 的安裝及使用
4.4 Go 的常見ORM 函數庫
4.5 小結
第3 篇Go Web 進階應用
05 Go 進階網路程式設計
5.1 Go Socket 程式設計
5.2 Go RPC 程式設計
5.3 微服務
5.4 小結
06 Go 檔案處理
6.1 操作目錄與檔案
6.2 處理XML 檔案
6.3 處理JSON 檔案
6.4 處理正規表示法
6.5 【實戰】從資料庫中匯出一個CSV 檔案
6.6 處理Go 日誌記錄
6.7 小結
07 Go 併發程式設計
7.1 併發與平行
7.2 處理程序、執行緒和程式碼協同
7.3 Go 併發模型簡介
7.4 用goroutine 和通道實現併發
7.5 用sync 套件實現併發
7.6 用Go 開發併發的Web 應用
7.7 小結
08 Go RESTful API 介面開發
8.1 什麼是RESTful API
8.2 Go 流行Web 框架的使用
8.3 【實戰】用Gin 框架開發RESTful API
8.4 【實戰】用Go 開發OAuth 2.0 介面
8.5 小結
第4 篇Go Web 專案實戰
09 【實戰】開發一個B2C電子商務系統
9.1 需求分析
9.2 系統設計
9.3 設計軟體架構
9.4 設計資料庫與資料表
9.5 架設系統基礎架構
9.6 前台模組開發
9.7 後台模組開發
9.8 小結
10 用Docker 部署Go Web 應用
10.1 了解Docker 元件及原理
10.2 安裝Docker
10.3 【實戰】用Docker 執行一個Go Web 應用程式
10.4 【實戰】透過Docker-Compose 快速部署
10.5 【 實戰】將 Docker 容器推送至伺服器
10.6 小結
序/導讀
序
回望時光,從2009 年11 月 Go 語言第一個版本發佈時起,我就開始持續關注Go 語言。當時是因為Go 語言是Google 公司開發的一門語言,所以我便格外關注。結果,從看到Go 語言的第一天起,我就被這門語言深深吸引了。
畢業後我進入蘇寧易購( 註:中國大陸3C 通路商) 從事軟體開發,在平時工作中,使用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 智慧插頭。讀者可以去Gitee 或GitHub 網站上按名稱搜索。由於我的部分Go 語言開放原始碼專案深受Go 語言社區的歡迎,加上市場上關於Go Web 開發的書很少,且書中很少有實戰的知識。所以我想寫一本Go 語言實戰方面的書來反應Go 語言社區的朋友們,也希望能幫助更多的人。於是,2019 年下半年我便在工作之餘開啟了本書的寫作之旅。
到了2020 年,由於公司專案比較緊,寫書的事便一直擱淺。直到2020年7 月,電子工業出版社的吳宏偉編輯找到我,邀請我寫書。恰好正在寫第2 章,我想這應該是和吳宏偉編輯有緣,便欣然答應。從此我開始捨棄業餘時間,全力寫作。
特別感謝吳宏偉編輯,在我寫書過程中他提出了許多寶貴的意見和建議,並和我反覆溝通、修改。經過反覆修改打磨,咬文嚼字,本書才得以完稿。
特別感謝Go 語言社區的所有的貢獻者,沒有他們的無私奉獻,就沒有Go 語言社區的繁榮。謹以此書獻給所有喜歡Go 語言的朋友們。
感謝我的爸爸秀剛、媽媽克平。生為農民的他們,具有中國農民最樸質的勤勞精神。他們生我養我,20 年如一日,送我讀完大學,在我心中他們很偉大。
感謝我的妻子清荷,我的知音知己。中文系的她讓我熟讀各種文學著作,也因此愛上寫作。在她的影響下,我熟讀《道德經》等經典文學著作,讓我在展翅翱翔的同時懂得保持謙卑和知進退。在我寫作期間,是她在背後默默地支持和付出,才使得這本書能夠順利完稿。
廖顯東