企業級 Go 項目開發實戰

孔令飛

  • 出版商: 機械工業
  • 出版日期: 2023-01-01
  • 售價: $774
  • 貴賓價: 9.5$735
  • 語言: 簡體中文
  • 頁數: 642
  • 裝訂: 平裝
  • ISBN: 7111716345
  • ISBN-13: 9787111716341
  • 相關分類: Go 程式語言
  • 立即出貨

買這商品的人也買了...

商品描述

這是一本手把手教讀者如何零基礎快速掌握企業級Go項目全流程開發的實戰性著作。
內容初稿源於極客時間上的專欄(有超過25000人付費學習),
圖書內容在專欄的基礎上做了全面的更新和大量的補充。
作者是騰訊雲的技術專家,有多年的企業級Go項目開發經驗。
全書圍繞一個可部署、可運行的企業級Go應用(附源碼,可二次開發)展開,
覆蓋項目全生命週期的所有環節,不僅將每個環節涉及的原理、
步驟講解得非常詳細,而且把項目涉及的Go語言知識點全部娓娓道來。
每個知識點都朝著*佳實踐方向去設計,採用了業界共識程度*高的Go包、Go設計模式、Go開發規範、Go簡潔架構等,
不僅能讓讀者事半功倍地掌握企業級Go項目的開發方法,而且能學到一線大廠的*佳實踐。
本書內容翔實,篇幅較大,一共31章,分為六個部分:
第一部分是項目開始前的準備工作,包括貫穿全書的實戰項目IAM的介紹與部署,以及Go開發環境的搭建;
第二至六部分詳細講解了項目的設計、管理、開發、測試、部署等。
包含了規範設計、文檔編寫、開發流程管理、功能設計與實現、
項目測試、性能優化、高可用、高安全、水平擴展等方方面面。
旨在幫助讀者徹底學會如何構建企業級Go 項目,並解決Go 項目開發所面臨的各類問題。

作者簡介

孔令飛
騰訊雲容器技術專家,曾就職於聯想和Red Hat,擁有多年Go項目開發和管理經驗。
雲計算技術專家,在雲計算領域有非常豐富的實踐經驗。
Kubernetes社區貢獻者,對Kubernetes、Docker、Serverless、微服務等技術有深入的理解。
騰訊學院特約講師,極客時間《Go 語言項目開發實戰》專欄作者,
掘金《基於Go 語言構建企業級的RESTful API 服務》專欄作者。

目錄大綱

第一部分項目準備
第1章Go開發環境準備2
1.1 機器選擇2
1.1.1 開發機選擇3
1.1.2 辦公機選擇3
1.2 Windows終端模擬器安裝和配置3
1.3 Linux服務器申請和配置4
1.3.1 Linux服務器申請4
1.3.2 登錄Linux服務器5
1.3.3 Linux服務器配置6
1.3.4 依賴安裝和配置8
1.4 Go編譯環境安裝和配置9
1.4.1 Go編譯工具安裝和配置10
1.4.2 Protobuf編譯環境安裝11
1.5 Go IDE安裝和配置12
1.6 本章總結14
第2章快速部署IAM系統15
2.1 為什麼選擇IAM系統作為實戰項目15
2.2 IAM系統概述16
2.2.1 IAM資源授權流程16
2.2.2 IAM系統架構介紹17
2.2.3 通過使用流程理解架構18
2.3 下載IAM項目代碼20
2.4 安裝和配置數據庫21
2.4.1 配置scripts/install/environment.sh21
2.4.2 安裝和配置MariaDB21
2.4.3 安裝和配置Redis22
2.4.4 安裝和配置MongoDB22
2.5 安裝和配置IAM系統24
2.5.1 準備工作25
2.5.2 安裝和配置iam-apiserver28
2.5.3 安裝iamctl32
2.5.4 安裝和配置iam-authz-server34
2.5.5 安裝和配置iam-pump36
2.5.6 安裝和配置iam-watcher38
2.5.7 安裝man 文件39
2.5.8 測試IAM系統是否安裝成功40
2.6 彩蛋:一鍵安裝40
2.7 本章總結41
第二部分項目設計
第3章規範設計44
3.1 有哪些地方需要製定規範44
3.2 開源規範45
3.2.1 開源協議概述45
3.2.2 開源協議選擇46
3.2.3 開源規範有什麼47
3.2.4 開源規範詳細內容47
3.2.5 運營開源項目48
3.3 文檔規範49
3.3.1 README 文檔規範49
3.3.2 項目文檔規範50
3.3.3 API文檔規範51
3.4 Commit Message規範53
3.4.1 Commit Message規範有哪些53
3.4.2 與Commit Message相關的3個
重要內容59
3.4.3 Commit Message規範自動化66
3.5 版本規範67
3.5.1 什麼是語義化版本規範67
3.5.2 語義化版本規範示例69
3.5.3 如何確定版本號69
3.6 本章總結69
第4章目錄結構設計71
4.1 如何規範目錄71
4.2 平鋪式目錄結構72
4.3 結構化目錄結構73
4.3.1 Go應用:主要存放前後端代碼75
4.3.2 Go應用:主要存放測試相關的
文件和代碼78
4.3.3 Go應用:存放與應用部署相關
的文件78
4.3.4 項目管理:存放管理Go項目的
各類文件79
4.3.5 文檔:主要存放項目的各類文檔80
4.3.6 不建議的目錄82
4.4 一些建議82
4.5 本章總結83
第5章工作流設計84
5.1 集中式工作流84
5.2 功能分支工作流85
5.3 Git Flow工作流88
5.3.1 Git Flow的5種分支88
5.3.2 Git Flow開發流程88
5.4 Forking工作流91
5.5 本章總結93
第6章研發流程設計95
6.1 如何設計Go項目的研發流程95
6.2 在設計研發流程時,需要關注
哪些點96
6.3 業界相對標準的研發流程96
6.3.1 需求階段96
6.3.2 設計階段98
6.3.3 開發階段98
6.3.4 測試階段100
6.3.5 發布階段100
6.3.6 運營階段102
6.4 角色與分工102
6.5 如何管理應用的生命週期104
6.6 應用生命週期管理技術有哪些104
6.7 研發模式105
6.8 CI/CD:自動化構建和部署應用106
6.8.1 持續集成107
6.8.2 持續交付107
6.8.3 持續部署107
6.9 DevOps:研發運維一體化108
6.9.1 AIOps:智能運維108
6.9.2 ChatOps:聊著天就把事情
給辦了109
6.9.3 GitOps:一種實現雲原生的
持續交付模型109
6.9.4 NoOps:無運維110
6.10 如何選擇合適的應用生命週期
管理技術111
6.11 本章總結111
第7章如何寫出優雅的Go項目112
7.1 優雅Go項目實現思路112
7.2 編寫高質量的Go應用113
7.2.1 代碼結構114
7.2.2 代碼規範115
7.2.3 代碼質量116
7.2.4 編程哲學119
7.2.5 軟件設計方法124
7.3 高效管理項目125
7.3.1 高效的開發流程125
7.3.2 使用Makefile管理項目126
7.3.3 自動生成代碼126
7.3.4 善於借助工具127
7.3.5 對接CI/CD127
7.4 編寫高質量的項目文檔128
7.5 本章總結128
第8章Go語言設計模式130
8.1 創建型模式131
8.1.1 單例模式131
8.1.2 工廠模式133
8.2 行為型模式136
8.2.1 策略模式136
8.2.2 模板模式138
8.3 結構型模式139
8.3.1 代理模式139
8.3.2 選項模式140
8.4 本章總結144
第三部分項目管理
第9章如何編寫Makefile148
9.1 規劃Makefile要實現的功能149
9.2 設計合理的Makefile結構151
9.3 掌握Makefile編寫技巧153
9.3.1 善用通配符和自動變量153
9.3.2 善用函數153
9.3.3 依賴需要用到的工具154
9.3.4 把常用功能放在/Makefile中,
不常用的放在分類Makefile中154
9.3.5 編寫可擴展的Makefile155
9.3.6 將所有輸出存放在一個目錄下,
方便清理和查找156
9.3.7 使用帶層級的命名方式156
9.3.8 做好目標拆分157
9.3.9 設置OPTIONS157
9.3.10 定義環境變量158
9.3.11 自己調用自己159
9.4 本章總結159
第10章IAM項目研發流程實戰160
10.1 開發階段160
10.1.1 代碼開發160
10.1.2 代碼提交165
10.2 測試階段167
10.3 IAM項目的Makefile項目管理
技巧168
10.3.1 Makefile help命令自動解析169
10.3.2 在options中指定變量值169
10.3.3 自動生成CHANGELOG169
10.3.4 自動生成版本號169
10.3.5 保持行為一致170
10.4 本章總結171
第11章靜態代碼檢查172
11.1 為什麼選擇golangci-lint做靜態
代碼檢查172
11.2 golangci-lint命令173
11.3 golangci-lint配置175
11.4 如何使用golangci-lint進行靜態
代碼檢查178
11.5 golangci-lint使用技巧180
11.6 本章總結182
第12章生成Swagger API文檔183
12.1 Swagger介紹183
12.2 Swagger和OpenAPI的區別184
12.3 用go-swagger來生成Swagger API
文檔184
12.3.1 安裝swagger工具185
12.3.2 swagger命令行工具介紹185
12.4 如何使用swagger命令生成
Swagger文檔186
12.4.1 解析註釋生成Swagger文檔186
12.4.2 go-swagger其他常用功能介紹192
12.5 IAM Swagger文檔194
12.6 本章總結195
第四部分項目開發
第13章錯誤處理198
13.1 錯誤碼設計198
13.1.1 期望錯誤碼實現的功能199
13.1.2 常見的錯誤碼實現方式199
13.1.3 錯誤碼設計建議201
13.1.4 業務Code碼設計201
13.1.5 如何設置HTTP狀態碼202
13.2 IAM項目錯誤碼設計規範203
13.2.1 錯誤碼設計規範203
13.2.2 錯誤信息規範說明204
13.2.3 IAM API返回值說明204
13.3 錯誤包204
13.3.1 錯誤包需要具有哪些功能204
13.3.2 錯誤包的實現208
13.3.3 如何記錄錯誤212
13.4 一個錯誤碼的具體實現215
13.5 錯誤碼實際使用示例218
13.6 本章總結219
第14章日誌處理220
14.1 如何設計日誌包220
14.1.1 基礎功能220
14.1.2 高級功能222
14.1.3 可選功能224
14.1.4 設計時需要關注的點226
14.2 如何記錄日誌226
14.2.1 在何處打印日誌227
14.2.2 在哪個日誌級別打印日誌228
14.2.3 如何記錄日誌內容229
14.2.4 記錄日誌的佳實踐總結230
14.3 拓展內容:分佈式日誌解決方案
(EFK/ELK)230
14.4 有哪些優秀的開源日誌包231
14.4.1 標準庫log包232
14.4.2 glog232
14.4.3 logrus232
14.4.4 zap233
14.4.5 開源日誌包選擇233
14.5 從零開始編寫一個日誌包234
14.5.1 定義日誌級別和日誌選項234
14.5.2 創建