|
-- 會員 / 註冊 --
|
|
|
|
Go語言精進之路:從新手到高手的編程思想、方法和技巧 2 ( 簡體 字) |
作者:白明 | 類別:1. -> 程式設計 -> Go語言 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 55508 詢問書籍請說出此書號!【有庫存】 NT售價: 595 元 |
出版日:1/1/2022 |
頁數:456 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111698227 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:《Go語言精進之路:從新手到高手的編程思想、方法和技巧 2》
Go入門容易,精進難,如何才能像Go開發團隊那樣寫出符合Go思維和語言慣例的高質量代碼呢?
本書將從編程思維和實踐技巧2個維度給出答案,幫助你在Go進階的路上事半功倍。
編程思維層面
只有真正領悟了一門語言的設計哲學和編程思維,并能將之用于實踐,才算精通了這門語言。本書從Go語言設計者的視角對Go背后的設計哲學和編程思想進行了梳理和分析,指引讀者體會那些看似隨意實則經過深思熟慮的設計背后的秘密。
實踐技巧層面
實踐技巧源于對Go開發團隊和Go社區開發的高質量代碼的閱讀、挖掘和歸納,從項目結構、代碼風格、語法及其實現、接口、并發、同步、錯誤與異常處理、測試與調試、性能優化、標準庫、第三方庫、工具鏈、Z佳實踐、工程實踐等多個方面給出了改善Go代碼質量、寫出符合 Go 思維和慣例的代碼的有效實踐。
全書的內容覆蓋如下10個大類,共66個主題,字字珠璣,句句箴言。
(1)Go語言的一切
(2)項目結構、代碼風格與標識符命名
(3)聲明、類型、語句與控制結構
(4)函數與方法
(5)接口
(6)并發編程
(7)錯誤處理
(8)測試、性能剖析與調試
(9)標準庫、反射與cgo
(10)工具鏈與工程實踐
學完這本書,你將擁有和 Go專家一樣的編程思維,寫出符合Go慣例和風格的高質量代碼,從眾多 Go 初學者中脫穎而出,快速實現從Go新手到專家的轉變! |
目錄:推薦序 前言 第一部分 熟知Go語言的一切 第1條 了解Go語言的誕生與演進 1.1 Go語言的誕生 1.2 Go語言的早期團隊和演進歷程 1.3 Go語言正式發布并開源 第2條 選擇適當的Go語言版本 2.1 Go語言的先祖 2.2 Go語言的版本發布歷史 2.3 Go語言的版本選擇建議 第3條 理解Go語言的設計哲學 3.1 追求簡單,少即是多 3.2 偏好組合,正交解耦 3.3 原生并發,輕量高效 3.4 面向工程,“自帶電池” 第4條 使用Go語言原生編程思維來寫Go代碼 4.1 語言與思維—來自大師的觀點 4.2 現實中的“投影” 4.3 Go語言原生編程思維 第二部分 項目結構、代碼風格與標識符命名 第5條 使用得到公認且廣泛使用的項目結構 5.1 Go項目的項目結構 5.2 Go語言典型項目結構 第6條 提交前使用gofmt格式化源碼 6.1 gofmt:Go語言在解決規模化問題上的最佳實踐 6.2 使用gofmt 6.3 使用goimports 6.4 將gofmt/goimports與IDE或編輯器工具集成 第7條 使用Go命名慣例對標識符進行命名 7.1 簡單且一致 7.2 利用上下文環境,讓最短的名字 攜帶足夠多的信息 第三部分 聲明、類型、語句與 控制結構 第8條 使用一致的變量聲明形式 8.1 包級變量的聲明形式 8.2 局部變量的聲明形式 第9條 使用無類型常量簡化代碼 9.1 Go常量溯源 9.2 有類型常量帶來的煩惱 9.3 無類型常量消除煩惱,簡化代碼 第10條 使用iota實現枚舉常量 第11條 盡量定義零值可用的類型 11.1 Go類型的零值 11.2 零值可用 第12條 使用復合字面值作為初值構造器 12.1 結構體復合字面值 12.2 數組/切片復合字面值 12.3 map復合字面值 第13條 了解切片實現原理并高效使用 13.1 切片究竟是什么 13.2 切片的高級特性:動態擴容 13.3 盡量使用cap參數創建切片 第14條 了解map實現原理并高效使用 14.1 什么是map 14.2 map的基本操作 14.3 map的內部實現 14.4 盡量使用cap參數創建map 第15條 了解string實現原理并高效使用 15.1 Go語言的字符串類型 15.2 字符串的內部表示 15.3 字符串的高效構造 15.4 字符串相關的高效轉換 第16條 理解Go語言的包導入 16.1 Go程序構建過程 16.2 究竟是路徑名還是包名 16.3 包名沖突問題 第17條 理解Go語言表達式的求值順序 17.1 包級別變量聲明語句中的表達式求值順序 17.2 普通求值順序 17.3 賦值語句的求值 17.4 switch/select語句中的表達式求值 第18條 理解Go語言代碼塊與作用域 18.1 Go代碼塊與作用域簡介 18.2 if條件控制語句的代碼塊 18.3 其他控制語句的代碼塊規則簡介 第19條 了解Go語言控制語句慣用法及使用注意事項 19.1 使用if控制語句時應遵循“快樂路徑”原則 19.2 for range的避“坑”指南 19.3 break跳到哪里去了 19.4 盡量用case表達式列表替代fallthrough 第四部分 函數與方法 第20條 在init函數中檢查包級變量的初始狀態 20.1 認識init函數 20.2 程序初始化順序 20.3 使用init函數檢查包級變量的初始狀態 第21條 讓自己習慣于函數是“一等公民” 21.1 什么是“一等公民” 21.2 函數作為“一等公民”的特殊運用 第22條 使用defer讓函數更簡潔、更健壯 22.1 defer的運作機制 22.2 defer的常見用法 22.3 關于defer的幾個關鍵問題 第23條 理解方法的本質以選擇正確的receiver類型 23.1 方法的本質 23.2 選擇正確的receiver類型 23.3 基于對Go方法本質的理解巧解難題 第24條 方法集合決定接口實現 24.1 方法集合 24.2 類型嵌入與方法集合 24.3 defined類型的方法集合 24.4 類型別名的方法集合 第25條 了解變長參數函數的妙用 25.1 什么是變長參數函數 25.2 模擬函數重載 25.3 模擬實現函數的可選參數與默認參數 25.4 實現功能選項模式 第五部分 接口 第26條 了解接口類型變量的內部表示 26.1 nil error值 != nil 26.2 接口類型變量的內部表示 26.3 輸出接口類型變量內部表示的詳細信息 26.4 接口類型的裝箱原理 第27條 盡量定義小接口 27.1 Go推薦定義小接口 27.2 小接口的優勢 27.3 定義小接口可以遵循的一些點 第28條 盡量避免使用空接口作為函數參數類型 第29條 使用接口作為程序水平組合的連接點 29.1 一切皆組合 29.2 垂直組合回顧 29.3 以接口為連接點的水平組合 第30條 使用接口提高代碼的可測試性 30.1 實現一個附加免責聲明的電子郵件發送函數 30.2 使用接口來降低耦合 第六部分 并發編程 第31條 優先考慮并發設計 31.1 并發與并行 31.2 Go并發設計實例 第32條 了解goroutine的調度原理 32.1 goroutine調度器 32.2 goroutine調度模型與演進過程 32.3 對goroutine調度器原理的進一步理解 32.4 調度器狀態的查看方法 32.5 goroutine調度實例簡要分析 第33條 掌握Go并發模型和常見并發模式 33.1 Go并發模型 33.2 Go常見的并發模式 第34條 了解channel的妙用 34.1 無緩沖channel 34.2 帶緩沖channel 34.3 nil channel的妙用 34.4 與select結合使用的一些慣用法 第35條 了解sync包的正確用法 35.1 sync包還是channel 35.2 使用sync包的注意事項 35.3 互斥鎖還是讀寫鎖 35.4 條件變量 35.5 使用sync.Once實現單例模式 35.6 使用sync.Pool減輕垃圾回收壓力 第36條 使用atomic包實現伸縮性更好的并發讀取 36.1 atomic包與原子操作 36.2 對共享整型變量的無鎖讀寫 36.3 對共享自定義類型變量的無鎖讀寫 第七部分 錯誤處理 第37條 了解錯誤處理的4種策略 37.1 構造錯誤值 37.2 透明錯誤處理策略 37.3 “哨兵”錯誤處理策略 37.4 錯誤值類型檢視策略 37.5 錯誤行為特征檢視策略 第38條 盡量優化反復出現的if err != nil 38.1 兩種觀點 38.2 盡量優化 38.3 優化思路 第39條 不要使用panic進行正常的錯誤處理 39.1 Go的panic不是Java的checked exception 39.2 panic的典型應用 39.3 理解panic的輸出信息 (以上為第1冊內容,以下為本書內容。) 第八部分 測試、性能剖析與調試 第40條 理解包內測試與包外測試的差別2 40.1 官方文檔的“自相矛盾”2 40.2 包內測試與包外測試3 第41條 有層次地組織測試代碼9 41.1 經典模式—平鋪9 41.2 xUnit家族模式10 41.3 測試固件13 第42條 優先編寫表驅動的測試20 42.1 Go測試代碼的一般邏輯20 42.2 表驅動的測試實踐21 42.3 表驅動測試的優點22 42.4 表驅動測試實踐中的注意事項23 第43條 使用testdata管理測試依賴的外部數據文件28 43.1 testdata目錄28 43.2 golden文件慣用法32 第44條 正確運用fake、stub和mock等輔助單元測試35 44.1 fake:真實組件或服務的簡化實現版替身36 44.2 stub:對返回結果有一定預設控制能力的替身39 44.3 mock:專用于行為觀察和驗證的替身44 第45條 使用模糊測試讓潛在bug無處遁形48 45.1 模糊測試在挖掘Go代碼的潛在bug中的作用49 45.2 go-fuzz的初步工作原理49 45.3 go-fuzz使用方法51 45.4 使用go-fuzz建立模糊測試的示例54 45.5 讓模糊測試成為“一等公民”58 第46條 為被測對象建立性能基準60 46.1 性能基準測試在Go語言中是“一等公民”60 46.2 順序執行和并行執行的性能基準測試62 46.3 使用性能基準比較工具69 46.4 排除額外干擾,讓基準測試更精確72 第47條 使用pprof對程序進行性能剖析76 47.1 pprof的工作原理76 47.2 使用pprof進行性能剖析的實例90 第48條 使用expvar輸出度量數據,輔助定位性能瓶頸點101 48.1 expvar包的工作原理102 48.2 自定義應用通過expvar輸出的度量數據105 48.3 輸出數據的展示110 第49條 使用Delve調試Go代碼112 49.1 關于調試,你首先應該知道的幾件事112 49.2 Go調試工具的選擇114 49.3 Delve調試基礎、原理與架構116 49.4 并發、Coredump文件與掛接進程調試125 第九部分 標準庫、反射與cgo 第50條 理解Go TCP Socket網絡編程模型136 50.1 TCP Socket網絡編程模型137 50.2 TCP連接的建立142 50.3 Socket讀寫145 50.4 Socket屬性155 50.5 關閉連接156 第51條 使用net/http包實現安全通信158 51.1 HTTPS:在安全傳輸層上運行的HTTP協議158 51.2 HTTPS安全傳輸層的工作機制161 51.3 非對稱加密和公鑰證書164 51.4 對服務端公鑰證書的校驗169 51.5 對客戶端公鑰證書的校驗172 第52條 掌握字符集的原理和字符編碼方案間的轉換175 52.1 字符與字符集175 52.2 Unicode字符集的誕生與UTF-8編碼方案177 52.3 字符編碼方案間的轉換179 第53條 掌握使用time包的正確方式187 53.1 時間的基礎操作187 53.2 時間的格式化輸出196 53.3 定時器的使用199 第54條 不要忽略對系統信號的處理209 54.1 為什么不能忽略對系統信號的處理209 54.2 Go語言對系統信號處理的支持210 54.3 使用系統信號實現程序的優雅退出216 第55條 使用crypto下的密碼學包構建安全應用219 55.1 Go密碼學包概覽與設計原則219 55.2 分組密碼算法221 55.3 公鑰密碼228 55.4 單向散列函數231 55.5 消息認證碼233 55.6 數字簽名235 55.7 隨機數生成238 第56條 掌握bytes包和strings包的基本操作240 56.1 查找與替換241 56.2 比較244 56.3 分割246 56.4 拼接248 56.5 修剪與變換249 56.6 快速對接I/O模型252 第57條 理解標準庫的讀寫模型254 57.1 直接讀寫字節序列255 57.2 直接讀寫抽象數據類型實例257 57.3 通過包裹類型讀寫數據263 第58條 掌握unsafe包的安全使用模式269 58.1 簡潔的unsafe包 270 58.2 unsafe包的典型應用273 58.3 正確理解unsafe.Pointer與uintptr277 58.4 unsafe.Pointer的安全使用模式280 第59條 謹慎使用reflect包提供的反射能力288 59.1 Go反射的三大法則288 59.2 反射世界的入口291 59.3 反射世界的出口295 59.4 輸出參數、interface{}類型變量及反射對象的可設置性295 第60條 了解cgo的原理和使用開銷300 60.1 Go調用C代碼的原理300 60.2 在Go中使用C語言的類型302 60.3 在Go中鏈接外部C庫307 60.4 在C中使用Go函數309 60.5 使用cgo的開銷309 60.6 使用cgo代碼的靜態構建314 第十部分 工具鏈與工程實踐 第61條 使用module管理包依賴320 61.1 Go語言包管理演進回顧320 61.2 Go module:Go包依賴管理的生產標準324 61.3 Go module代理339 61.4 升級module的主版本號342 第62條 構建最小Go程序容器鏡像350 62.1 鏡像:繼承中的創新350 62.2 “鏡像是個筐”:初學者的認知351 62.3 理性回歸:builder模式的崛起353 62.4 “像賽車那樣減重”:追求最小鏡像355 62.5 “要有光”:對多階段構建的支持357 第63條 自定義Go包的導入路徑359 63.1 govanityurls360 63.2 使用govanityurls361 第64條 熟練掌握Go常用工具367 64.1 獲取與安裝367 64.2 包或module檢視373 64.3 構建380 64.4 運行與診斷390 64.5 格式化與靜態代碼檢查398 64.6 重構402 64.7 查看文檔412 64.8 代碼導航與洞察419 第65條 使用go generate驅動代碼生成421 65.1 go generate:Go原生的代碼生成“驅動器”421 65.2 go generate的工作原理423 65.3 go generate的應用場景425 第66條 牢記Go的常見“陷阱”430 66.1 語法規范類431 66.2 標準庫類455 |
序: |
|