◎ 實作六個最強大的Go專案
◎ 想用Go不怕無用武之地
本書特色
► 最齊全Go工具
► HTTP網路程式剖所
► 完整RPC應用
► 高速WebSocket應用
► 處理程序快取加速
► PProf、GODEBUG高級應用
本書重點
全書共分為6章,針對Go語言中較為常用的命令列應用、HTTP應用、RPC應用、WebSocket 應用、處理程序內快取、Go語言中的大殺器(分析工具)進行詳細的介紹,並開發一系列小的適合程式師日常使用的工具。
其中前5章是Go語言開發中最常見的專案類型。對專案開發、細節分析、執行時期分析等核心內容進行較為深入的剖析,提供相對完整的專案實作經驗。有了幾個大型專案的磨鍊之後,撰寫出專業等級的系統再也不是難事。
適合讀者群 有一定Go語言基礎的讀者,想要進行Go相關專案實作、希望熟悉Go常用分析工具的開發人員。
作者簡介:
陳劍煜(網名:煎魚)
微信公眾號「腦子進煎魚了」作者,「Go夜讀」 SIG小組成員,對Go語言有豐富的經驗。在社群連載過一系列Go語言相關的技術文章,其中「跟煎魚學Go」系列廣受歡迎。
徐新華(網名:polaris )
Go語言中文網站長,擔任北京一家創業公司CTO。2011年取得北京大學碩士,先後在開心網、奇虎360工作。一直從事服務端相關工作,有著豐富的經驗。在Go1.0正式發佈時開始接觸,並運用於工作中,致力推廣Go語言,建構Go語言中文社區。
作者序
前言
▨ 為什麼要寫這本書
數年前,公司開始嘗試技術堆疊轉型,而我剛好被抽調到新業務的突破組,負責 Go 相關技術的推進。但是當時網路上並沒有系統化、結構化的教材,因此我寫了一些中文連載系列,希望借此將Go 相關的知識分享給廣大的Go 語言同好。
近幾年,隨著學習Go 語言人數的增加,Go 語言相關的圖書也越來越多,但依然沒有相對完整的專案實作類的圖書,因此我決定再次行動起來,希望將這一塊的知識成系統地分享給大家。
▨ 適合讀者群
本書適合有一定Go 語言基礎的讀者,以及相關開發人員閱讀:
■ 有一定 Go 語言基礎的開發人員。
■ 想要進行 Go 相關專案實作的開發人員。
■ 希望熟悉 Go 常用分析工具的開發人員。
▨ 本書內容
全書共分為6 章,分別是命令列應用、HTTP 應用、RPC 應用、WebSocket 應用、處理程序內快取和Go 語言中的大殺器(分析工具),其中前5 章是Go 語言開發中最常見的專案類型。
本書對專案開發、細節分析、執行時期分析等核心內容進行了較為深入的剖析,提供了相對完整的專案實作經驗。在專案反覆運算過程中,難免會遇到問題,因此本書針對 Go 語言的大殺器(分析工具)及常見問題進行了全面說明,幫助讀者對各種問題進行排除。
▨ 關於實作
本書的主要內容是針對專案實作,實作大致可以分為三個方向,分別是「做、學、排」,即做好你需要的專案、學習優秀的專案、排除和分析問題。
學習優秀的開放原始碼或私有專案可以幫助我們不斷精進所負責的專案。既然是企業專案,那麼在長期的反覆運算中一定會遇到或大或小的事故,因此知道如何排除和分析問題就顯得非常重要。
同時這裡有一個隱藏的方向,那就是歸納,即對所學的知識進行複習,將思維聚攏並把知識歸納記錄下來,這也是本書有很多「小結」的原因。
▨ 社群支援
我們建立了官方網站 go-programming.cn 和對應的知識星球對本書進行長期維護,也希望這個平台能夠幫助讀者進行思維擴充,認識更多志同道合的朋友。
另外,我們只是樂於分享的 Go 語言同好,技術水準有限,書中難免有錯漏之處,敬請讀者不吝賜教,我們將感激不盡。
▨ 繁體中文版說明
本書作者為中國大陸人士,為求書附程式正常執行僅提供簡體中文版程式下載,請至本公司官網https://deepmind.com.tw 下載。本書程式在github 上亦有維護,讀者可前往https://github.com/go-programming-tour-book 追蹤原作者最新版本程式。
▨ 致謝
感謝 Go 語言社群中的同好們,如果沒有你們的鼓勵,本書不可能出版。最後感謝為本書犧牲了大量業餘時間進行"Review" 的朋友們:
■ 盛傲飛(aofei)
■ 石太彬(shitaibin)
■ 曾曉東(teroy)
陳劍煜
感謝我的家人一直以來對我的事業和愛好毫無怨言的支援!
特別要感謝我的妻子,在我寫作本書時,給予我無微不至的照顧,讓我全身心地投入寫作中。因為特殊時期,女兒們沒在身邊,感謝岳父岳母對她們無微不至的照顧!
徐新華
前言
▨ 為什麼要寫這本書
數年前,公司開始嘗試技術堆疊轉型,而我剛好被抽調到新業務的突破組,負責 Go 相關技術的推進。但是當時網路上並沒有系統化、結構化的教材,因此我寫了一些中文連載系列,希望借此將Go 相關的知識分享給廣大的Go 語言同好。
近幾年,隨著學習Go 語言人數的增加,Go 語言相關的圖書也越來越多,但依然沒有相對完整的專案實作類的圖書,因此我決定再次行動起來,希望將這一塊的知識成系統地分享給大家。
▨ 適合讀者群
本書適合有一定Go 語言基礎的讀者,以及相關開發人員閱讀:
■ 有一定 Go 語言基礎...
目錄
前言
01命令列應用:打造屬於自己的工具集
1.1 工具之旅
1.2 單字格式轉換
1.3 便捷的時間工具
1.4 SQL 敘述到結構的轉換
02 HTTP 應用:寫一個完整的部落格後端
2.1 部落格之旅
2.2 專案設計
2.3 公共元件
2.4 介面文件
2.5 介面驗證
2.6 模組開發:標籤管理
2.7 上傳圖片和檔案服務
2.8 API 存取控制
2.9 常見應用中介軟體
2.10 鏈路追蹤
2.11 應用設定問題
2.12 編譯器應用
2.13 優雅重新啟動和停止
2.14 思考
03 RPC 應用:啟動你的RPC 服務
3.1 gRPC 和Protobuf
3.2 Protobuf 的使用
3.3 gRPC 的使用
3.4 執行一個gRPC 服務
3.5 gRPC 服務間的內調
3.6 提供HTTP 介面
3.7 介面文件
3.8 gRPC 攔截器
3.9 metadata 和RPC 自訂認證
3.10 鏈路追蹤
3.11 gRPC 服務註冊和發現
3.12 實現自訂的protoc 外掛程式
3.13 對gRPC 介面進行版本管理
3.14 常見問題討論
04 WebSocket 應用:聊天室
4.1 以TCP 為基礎的聊天室
4.2 認識WebSocket
4.3 聊天室需求分析和設計
4.4 專案結構組織和基礎程式架構
4.5 核心流程
4.6 廣播器
4.7 非核心功 能
4.8 關鍵性能分析和最佳化
4.9 Nginx 部署
4.10 歸納
05 處理程序內快取
5.1 快取簡介
5.2 快取淘汰演算法
5.3 處理程序內快取
5.4 快取的效能和最佳化想法
5.5 高性能快取函數庫—BigCache
5.6 處理程序內快取的最佳化版
06 Go 語言中的大殺器
6.1 Go 大殺器PProf 之效能剖析(上)
6.2 Go 大殺器PProf 之效能剖析(下)
6.3 Go 大殺器之追蹤剖析trace
6.4 用GODEBUG 看排程追蹤
6.5 用GODEBUG 看GC
6.6 Go 處理程序診斷工具gops
6.7 公開和發佈度量指標
6.8 逃逸分析
A Go modules 的入門和使用
A.1 Go modules 簡介
A.2 GOPATH 簡介
A.3 Go modules 的基本使用
A.4 Go modules 下的go get 行為
A.5 Go modules 的go run/build 行為
A.6 Go modules 的匯入路徑說明
A.7 Go modules 的語義化版本控制
A.8 Go modules 的最小版本選擇
A.9 go.sum 檔案要不要提交
A.10 go list 的作用是什麼
A.11 小結
B goroutine 與panic、recover 的小問題
B.1 思考問題
B.2 如何解決
B.3 為什麼要先defer 才能recover
B.4 recover 是萬能的嗎
B.5 小結
C Go 在容器執行時期要注意的細節
C.1 問題描述
C.2 會造成什麼後果
C.3 解決方法
D 讓Go「恐慌」的十種方法
前言
01命令列應用:打造屬於自己的工具集
1.1 工具之旅
1.2 單字格式轉換
1.3 便捷的時間工具
1.4 SQL 敘述到結構的轉換
02 HTTP 應用:寫一個完整的部落格後端
2.1 部落格之旅
2.2 專案設計
2.3 公共元件
2.4 介面文件
2.5 介面驗證
2.6 模組開發:標籤管理
2.7 上傳圖片和檔案服務
2.8 API 存取控制
2.9 常見應用中介軟體
2.10 鏈路追蹤
2.11 應用設定問題
2.12 編譯器應用
2.13 優雅重新啟動和停止
2.14 思考
03 RPC 應用:啟動你的RPC 服務
3.1 gRPC 和Protobuf
3.2 Protobuf 的使用
3.3 gRPC 的...