首頁 搜尋 我的知識庫
完全自學!Go 語言 (Golang) 實戰聖經

完全自學!Go 語言 (Golang) 實戰聖經

作者: Delio D’Anna
出版社: 旗標
出版日期: 2021/07/08
ISBN-13: 9789863126706
書店 1






內容描述


你從未見過如此完整的 Go 語言中文教材!

  Go 語言
  ☛ 2016 年被 TIOBE 選為年度最佳程式語言
  ☛ 2020 年 Stack Overflow調查為 『全球第三高薪開發者職業』
  ☛ 2020 年超越 Python 成為『職業開發者最想學習語言』
  ☛ 已被 Google、Dropbox、Twitch、Uber 等企業採用,也用來打造 Docker、Kubernetes 等熱門開源工具

  Go 語言,或者 『Golang』,是近年來成長最快速的新世代程式語言之一。它語法接近 C 及 Java,但藉由更精簡的語法來縮短開發時程、使專案能輕易擴張規模,並具備安全的靜態型別、記憶體垃圾回收、跨平台編譯能力等。連 Python 之父 Guido van Rossum 都說, Go『是所有新語言中最具 Python 風格的』...

  最重要地,Go 語言擁有豐富程度堪比 Python 的內建函式庫,無須下載額外套件,就能用少於 10 行程式寫出簡易 HTTP 伺服端應用!甚至,它獨特的 Goroutine 讓你能用簡單得稱奇的方式啟用非同步運算,超輕鬆解鎖現代多核心電腦的運算威力。

  想跨足 Go 語言,讓履歷及薪水更上一層樓,卻依舊找不到合適的入門書嗎?本書以豐富的範例及練習,帶領讀者實地操作 Go 語言的基礎及相關特色,讀完就能立馬投入實戰。替自己的職涯超前佈署,快速增加一技之長,別再只能對現況『滾動式修正』啦!

本書特色
 
  作者群擁有豐富的 Go 語言開發經驗,精心設計了「範例」、「練習」和「延伸習題」,讓讀者從實作中親自體會到 Go 語言的威力。小編也在書中適當加入「編註」與「補充」,以幫助理解及補充必要知識,更增添本書的可讀性。

  你將在本書讀到:

  ☛ Go 語言的型別、函式、結構與介面
  ☛ 模組管理和單元測試
  ☛ JSON 資料、檔案、資料庫操作
  ☛ HTTP 客戶端/伺服器應用和加密
  ☛ 非同步運算
  ☛ 附全書 258 個範例/練習程式及 36 個延伸習題檔案下載 (使用 Go 1.16+ )


目錄大綱


▶ 閱讀本書前的準備
本書的表達習慣
安裝 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# 等多種語言。






相關書籍

快速掌握VR基本功:從概念到應用-使用Unity打造虛擬世界 附影片教學與範例素材檔-適用Unity5.X

我想學設計!人氣精選Photoshop影像編修技:工具x調色x文字x合成x廣告設計(千萬網友點擊推薦狂推必學)

ASP.NET Core 7 MVC 跨平台範例實戰演練

一次學會Revit 2024:Architecture、MEP、Structure