预购商品
书目分类
特别推荐
▶ 閱讀本書前的準備 本書的表達習慣 安裝 Go 語言 安裝 Visual Studio Code 編輯器 建立和執行專案 The Go Playground 本書執行專案的慣例 從 VS Code 執行執行 Go 程式 下載本書附錄、範例程式並開啟工作區 ▶ Chapter 1 變數與算符 1-1 前言 1-1-1 Go 語言簡介 1-1-2 Go 語言的模樣 1-2 宣告變數 (variables) 1-2-1 用 var 宣告變數 1-2-2 用 var 一次宣告多個變數 1-2-3 用 var 宣告變數時省略型別或賦值 1-2-4 推斷型別發生問題的時候 1-2-5 短變數宣告 1-2-6 以短變數宣告建立多重變數 1-2-7 在單行程式內用 var 宣告多重變數 1-2-8 非英語的變數名稱 1-3 更改變數值 1-3-1 更改單一變數的值 1-3-2 一次更改多個變數值 1-4 算符 (operators) 1-4-1 算符基礎 1-4-2 算符簡寫法 1-4-3 值的比較 1-5 零值 (zero values) 1-6 值 vs. 指標 (pointers) 1-6-1 了解指標 1-6-2 取得指標 1-6-3 從指標取得值 1-6-4 採用指標的函式設計 1-7 常數 (constants) 1-8 列舉 (enums) 1-9 變數作用範圍 (Scope) 1-10 本章回顧 ▶ Chapter 2 條件判斷與迴圈 2-1 前言 2-2 if 敘述 2-2-1 if 敘述基礎 2-2-2 else 敘述 2-2-3 else if 敘述 2-2-4 if 敘述的起始賦值 2-3 switch 敘述 2-3-1 switch 敘述基礎 2-3-2 switch 的不同用法 2-4 迴圈 2-4-1 for 迴圈基礎 2-4-2 for i 迴圈 2-4-3 for range 迴圈 2-4-4 break 和 continue 敘述 2-5 本章回顧 ▶ Chapter 3 核心型別 3-1 前言 3-2 布林值:true/false 3-3 數字 3-3-1 整數 3-3-2 浮點數 3-3-3 溢位和越界繞回 3-3-4 大數值 3-3-5 位元組 (Byte) 3-4 字串 (String) 3-4-1 字串與字串常值 3-4-2 Rune 3-5 nil 值 3-6 本章回顧 ▶ Chapter 4 複合型別 4-1 前言 4-2 集合型別 (collection types) 4-3 陣列 (array) 4-3-1 定義一個陣列 4-3-2 陣列的比較 4-3-3 透過索引鍵賦值 4-3-4 讀取陣列元素值 4-3-5 寫入值到陣列 4-3-6 走訪一個陣列 4-4 切片 (slice) 4-4-1 使用切片 4-4-2 為切片附加多重元素 4-4-3 從切片和陣列建立新的切片 4-4-4 了解切片的內部運作 4-4-5 切片的隱藏陣列置換 4-5 映射表 (map) 4-5-1 map 的基礎 4-5-2 從 map 讀取元素 4-5-3 從 map 刪除元素 4-6 簡易自訂型別 (custom types) 4-7 結構 (struct) 4-7-1 結構的定義 4-7-2 結構的相互比較 4-7-3 內嵌結構 4-7-4 替自訂型別加上方法 (method) 4-8 介面與型別檢查 4-8-1 型別轉換 4-8-2 型別斷言與 interface{} 空介面 4-8-3 型別 switch 4-9 本章回顧 ▶ Chapter 5 函式 5-1 前言 5-2 函式 5-2-1 函式的宣告和組成 5-2-2 函式參數 5-2-3 函式傳回值 5-2-4 Naked Returns 5-3 參數不定函式 5-4 匿名函式與閉包 5-4-1 宣告匿名函式 5-4-2 建立閉包 5-5 以函式為型別的參數 5-5-1 自訂函式型別 5-5-2 使用自訂函式型別的參數 5-5-3 用自訂函式型別作為傳回值 5-6 defer 5-6-1 用 defer 延後函式執行 5-6-2 多重 defer 的執行順序 5-6-3 defer 對變數值的副作用 5-7 摘要 ▶ Chapter 6 錯誤處理 6-1 前言 6-2 程式錯誤的類型 6-2-1 語法錯誤 6-2-2 執行期間錯誤 6-2-3 邏輯錯誤/語意錯誤 6-3 其它程式語言的錯誤處理方式 6-4 error 介面 6-4-1 Go 語言的 error 值 6-4-2 error 型別定義 6-4-3 建立 error 值 6-4-4 (小編補充) 使用 fmt.Errorf() 建立 error 值 6-5 panic 6-5-1 何謂 panic? 6-5-2 panic() 函式 6-6 recover (復原) 6-7 處理 error 與 panic 的指導方針 6-8 本章回顧.6-31 ▶ Chapter 7 介面 7-1 前言 7-2 介面 (interface) 7-2-1 認識介面 7-2-2 定義介面型別 7-2-3 實作一個介面 7-2-4 隱性介面實作的優點 7-3 鴨子定型和多型 7-3-1 鴨子定型 7-3-2 多型 7-4 在函式中活用介面 7-4-1 以介面為參數的函式 7-4-2 以介面為傳回值的函式 7-4-3 空介面 interfac{} 7-4-4 型別斷言與型別 switch 7-5 本章回顧 ▶ Chapter 8 套件 8-1 前言 8-1-1 何謂套件 8-1-2 運用套件的好處 8-2 使用套件 8-2-1 何謂套件 8-2-2 套件的命名 8-2-3 套件的宣告 8-2-4 將套件的功能匯出 8-3 管理套件 8-3-1 GOROOT 8-3-2 GOPATH 8-3-4 Go Modules ★ Go 1.16+ 的預設套件管理方法 8-3-5 下載第三方模組或套件 8-4 套件的呼叫與執行 8-4-1 套件別名 8-4-2 init() 函式 8-5 本章回顧 ▶ Chapter 9 程式除錯:格式化訊息、日誌與單元測試 9-1 前言 9-1-1 臭蟲的發生原因 9-1-2 除錯原則 9-2 以 fmt 套件做格式化輸出 9-2-1 fmt 套件 9-2-2 fmt 的格式化輸出 9-2-3 印出浮點數的進階格式化 9-2-4 用 strconv.FormatFloat() 格式化浮點數 9-3 使用 log 提供追蹤訊息/日誌 9-3-1 印出追蹤訊息 9-3-2 用 log 套件輸出日誌 9-3-3 建立自訂 logger 物件 9-4 撰寫單元測試 9-5 本章回顧 ▶ Chapter 10 時間處理 10-1 前言 10-2 建立時間資料 10-2-1 取得系統時間 10-2-2 取得時間資料中的特定項目 10-3 時間值的格式化 10-3-1 將時間轉成指定格式的字串 10-3-2 將特定格式的時間字串轉成時間值 10-4 時間值的管理 10-4-1 建立和增減時間值 10-4-2 設定時區來取得新時間值 10-5 時間值的比較與時間長度處理 10-5-1 比較時間 10-5-2 用時間長度來改變時間 10-5-3 測量時間長度 10-6 本章回顧 ▶ Chapter 11 編碼/解碼 JSON 資料 11-1 前言 11-2 解碼 JSON 為 Go 結構 11-2-1 Unmarshal() 11-2-2 加上結構 JSON 標籤 11-2-3 解碼 JSON 到複合結構 11-3 將 Go 結構編碼為 JSON 11-3-1 Marshal() 11-3-2 將有多重欄位的結構轉為 JSON 11-3-3 略過欄位 11-3-4 有排版的 JSON 編碼結果 11-4 使用 Decoder/Encoder 處理 JSON 資料 11-5 處理內容未知的 JSON 資料 11-5-1 將 JSON 格式解碼成 map 11-5-2 將 map 編碼成 JSON 格式 11-6 gob:Go 自有的編碼格式 11-7 本章回顧 ▶ Chapter 12 系統與檔案 12-1 前言 12-2 命令列旗標與其引數 12-3 系統中斷訊號 12-4 檔案存取權限 12-5 建立與寫入檔案 12-5-1 用 os 套件新建檔案 12-5-2 對檔案寫入字串 12-5-3 一次完成建立檔案及寫入 12-5-4 檢查檔案是否存在 12-5-5 一次讀取整個檔案內容 12-5-6 一次讀取檔案中的一行字串 12-5-7 刪除檔案 12-6 最完整的檔案開啟與建立功能:os.OpenFile() 12-7 處理 CSV 格式檔案 12-7-1 走訪 CSV 檔內容 12-7-2 讀取每行資料各欄位的值 12-6 本章回顧 ▶ Chapter SQL 13 與資料庫 13-1 前言 13-2 安裝 MySQL 資料庫 13-2-1 安裝 MySQL Server 13-2-2 新增資料庫使用者 13-2-3 建立一個 MySQL 資料庫 13-2-4 下載 Go 語言的 MySQL 驅動程式 13-3 以 Go 語言連接資料庫 13-4 建立、清空和移除資料表 13-5 插入資料 13-6 查詢資料 13-6-1 查詢並印出整個資料表內容 13-6-2 查詢符合條件的資料 13-7 更新既有資料 13-8 練習:FizzBuzz 統計表 13-9 本章回顧 ▶ Chapter 14 使用 Go 的 HTTP 客戶端 14-1 前言 14-2 Go 語言的 HTTP 客戶端 14-3 對伺服器傳送 GET 請求 14-3-1 使用 http.Get() 發送 GET 請求 14-3-2 取得並解析伺服器的 JSON 資料 14-4 用 POST 請求傳送資料給伺服器 14-4-1 送出 POST 請求並接收回應 14-4-2 用 POST 請求上傳檔案 14-5 在客戶端使用自訂標頭做為請求選項 14-6 本章回顧 ▶ Chapter 15 建立 HTTP 伺服器程式 15-1 前言 15-2 打造最基本的伺服器 15-2-1 使用 HTTP 請求處理器 (handler) 15-2-2 簡單的 routing (路由) 控制 15-2-3 修改程式來應付多重路徑請求 15-3 解讀網址參數來動態產生網頁 15-4 使用模板產生網頁 15-5 使用靜態網頁資源 15-5-1 讀取靜態 HTML 網頁 15-5-2 在伺服器上提供多重靜態資源 15-5-3 使用模板檔案產生動態網頁 15-6 用表單和 POST 方法更新伺服器資料 15-7 簡易 RESTful API:交換 JSON 資料 15-8 本章回顧 ▶ Chapter 16 並行性運算 16-1 前言 16-2 使用 Go 語言的並行性運算 16-2-1 Goroutine 16-2-2 WaitGroup 16-3 解決記憶體資源競爭 (race condition) 16-3-1 原子操作 (atomic operation) 16-3-2 互斥鎖 (mutex) 16-4 通道 (channel) 16-4-1 使用通道傳遞訊息 16-4-2 從通道讀取多重來源的資料 16-5 並行性運算的流程控制 16-5-1 通道緩衝區與通道關閉:close() 16-5-2 使用通道訊息來等待 Goroutine 結束 16-5-3 使用通道傳送取消信號 16-5-4 使用函式來產生通道及 Goroutine 16-5-5 限制通道的收發方向 16-5-6 將結構方法當成 Goroutine 16-6 context 套件 16-7 本章回顧 ▶ Chapter 17 運用 Go 語言工具 17-1 前言 17-2 go build 工具:編譯可執行檔 17-2-1 使用 go build 17-2-2 編譯條件:選擇要編譯的檔案 ★ 如何針對跨平台編譯 17.3 go run 工具:執行程式 17-3 gofmt 工具:程式碼格式化 ★ 小編補充:Go 語言伺服器 gopls 17-4 go vet:程式靜態分析工具 ★ 小編補充:Go 語言風格檢查工具:golint 17-5 go doc 工具:產生文件 17-6 go get 工具;下載模組或套件 17-7 本章回顧 ▶ Chapter 18 加密安全 18-1 前言 18-2 雜湊函式 ★ 使用 MD5 和 SHA2/SHA3 18-3 加密法 18-3-1 對稱式加密法 ★ 使用 AES + GCM 18-3-2 非對稱式加密法 ★ 使用 RSA-OAEP 18-4 數位簽章 ★ 使用 Ed25519 18-5 HTTPS/TLS 與 X.509 憑證 ★ 給客戶端和伺服器使用自簽署憑證 ★ 改用 ECDSA 簽章演算法 18-6 本章回顧 ▶ Chapter 19 Go 語言的特殊套件:reflect 與 unsafe 19-1 反射 (reflection) 19-1-1 TypeOf() 和 ValueOf() 19-1-2 取得指標值和修改之 19-1-3 取得結構的欄位名稱、型別與其值 19-1-4 練習:用 reflect 取代介面斷言 19-1-5 DeepEqual 19-2 unsafe 套件 19-2-1 unsafe.Pointer 指標 19-2-2 以 uintptr 搭配 unsafe 存取記憶體位址 19-2-3 Go 語言標準套件中的 unsafe 19-3 本章回顧 ▶ 附錄 延伸習題
作者簡介 Delio D'Anna 現任 Cognitiv+ 的機器學習工程師, 專長為分散式系統架構, 有三年 Go 語言開發經驗。 Andrew Hayes 現任 CI/CD 平台 Harness 主管工程師, 有三年 Go 語言開發資歷,工作過的產業類型包括儲存設備、網路、DevOps 和雲端。 Sam Hennessy 從 2015 年起轉為全職 Go 語言工程師, 替新創企業、政府機構和大企業工作過, 也擔任包括 Go 語言在內的講師。現任日本 WealthPark Co., Ltd. 不動產公司的後端經理。 Jeremy Leasor 現任資安公司 Aronis SCS 的 Go 語言工程師, 擁有超過 20 年 IT 資歷, 包括 4 年以上的 Go 語言經驗, 發展安全性與資料庫方面的應用。 Gobin Sougrakpam 從系統整合工程師起家, 目前是 Go 程式設計師, 替 VMWare 和 AMS 等平台建置自動化方案。現任資訊服務管理公司 ServiceNow 資深工程師。 Dániel Erno Szabó 現任水電管理企業 Itron, Inc. 的 DevOps 工程師, 是個 IT 迷, 熱愛 Go、Python、Ruby 和 C# 等多種語言。
客服公告
热门活动
订阅电子报