Go 語言基礎實戰 (開發, 測試及部署)
4.5 (81 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
271 students enrolled

Go 語言基礎實戰 (開發, 測試及部署)

全面介紹了 Go 語言的特點、安裝部署環境、語言語法、併發流程以及在多個實戰中的應用,並介紹如何整合 CI/CD 服務
4.5 (81 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
271 students enrolled
Created by Bo-Yi Wu
Last updated 5/2020
Traditional Chinese
Price: $129.99
30-Day Money-Back Guarantee
This course includes
  • 13 hours on-demand video
  • 4 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • 如何將 Go 導入團隊及說服主管使用
  • 如何寫跨平台 Command Line 工具
  • 如何善用 Go 語言特性加快部署速度
  • 如何有效率的撰寫 Go 語言
  • 部署到 AWS 或 Heroku 雲平台
  • 使用 Drone CI/CD 自動化測試及部署
Course content
Expand all 69 lectures 12:52:49
+ Go 環境建置
8 lectures 01:20:56

vscode 編輯器只需要安裝 Go plugin

VSCode 編輯器搭配 Go 環境
03:38

GOPATH 目錄底下結構

  • bin: 編譯後產生可執行檔案
  • src: 存放程式碼 (工作目錄)
  • pkg: 放置編譯後的 .a 檔案
什麼是 GOPATH 及 GOROOT
08:34

學習底下指令用法

  • go get
  • go run
  • go test
  • go install
  • go build


Go 指令介紹
06:39

很多朋友剛入門 Go 語言時,第一個會遇到的問題是,該如何設定專案配置,讓專案可以正常執行,在個人電腦該如何開發多個專案,這邊就會遇到該如何設定 $GOPATH,我在這邊跟大家講個觀念,開發環境只會有一個 $GOPATH,不管團隊內有多少專案,都是存放在同一個 GOPATH,避免每次開專案都要重新設定 $GOPATH,而專案內用到的相依性套件,請各自維護,透過官方提供的 wiki,請選一套覺得好用的來使用吧,沒有最好的工具,找一套適合團隊是最重要的。

Preview 11:37
  1. 舊專案內 vendor 轉換成 go module 設定

  2. 新專案如何啟用  go module

  3. 在 Travis CI 或 Drone 如何使用 go module

  4. 在開源專案內並存 vendor 及 go module

Preview 17:05

Go Module 是 Golang 推出的一套件管理系統,在 Go 1.11 推出後,許多 Package 也都陸續支援 Go Module 取代舊有的套件管理系統,像是 govendor 或 dep 等,而再過不久之後,保留 vendor 的方式也會被移除,畢竟現在開發已經不需要在 GOPATH 目錄底下了。對於 Go Module 不熟的話,建議先看官方今年寫的一篇教學部落格,底下是教學會涵蓋的範圍

* Creating a new module.

* Adding a dependency.

* Upgrading dependencies.

* Adding a dependency on a new major version.

* Upgrading a dependency to a new major version.

* Removing unused dependencies.

而本篇最主要會跟大家探討如何發佈 v2 以上的套件版本。

Go Module 如何發佈 v2 以上版本
11:09
+ Go 基礎介紹
14 lectures 03:07:27

介紹如何開啟新專案撰寫第一個 Hello World 主程式

Preview 05:49

介紹如何撰寫專案的 Package 並且該如何引用 (三種引用特性)

如何使用 Go Package
13:38

介紹三種 Go 的變數宣告方式

如何宣告 Go 變數
05:41

此章節會教大家撰寫基本的 go func 跟使用技巧

  1. 單一回傳值 func
  2. 多重回傳值 func
  3. func 回傳 func
  4. Anonymous Func (常使用在 go routine)
  5. func 參數設計
如何使用 go func
21:53

此章節教大家在 Go 語言內如何處理錯誤訊息。兩種方式可以回傳錯誤

  1. errors.New("error")
  2. fmt.Errorf("error")

假設有個 func 是用來判斷使用者帳號是否存在於資料庫,那該如何定義錯誤型態 (使用者已存在就回傳錯誤)。

錯誤處理 (Error Handler)
14:15

在寫 func 時,如果參數型態是 Slice,這時候是會把 Slice 第一個內容位址傳入,所以假設在 Function 內修正該值,則會影響 main 函數內的變數,這邊需要大家注意。

用 Slice 做 Function 參數技巧
11:17

本講座會簡單說明如何使用 switch case,並且告知大家請勿大量使用 if else if 的寫法,取而代之的是 switch

如何使用 switch case 取代 if else if
05:53

Go 語言的特性 init func 可以讓開發者在多個 package 內定義自己的 init func,那該如何使用了?

什麼是 init func
06:29

在 Struct Method 內,許多人不知道底下兩種寫法的差異,這堂課會交給大家 pointers vs values 的差異性,以及使用上面該注意的 race condition。

  • func (e Email) Test {}

  • func (e *Email) Test {}

Struct Method 的 Pointers vs. Values 差異
17:47

為什麼我會選用 Go 語言,其中一個很著要原因是,在 Go 語言寫測試實在太簡單了,Go 語言內建基本的測試套件,讓開發者可以不用引入第三方套件就可以輕易寫測試,另外寫測試的好處可以讓團隊減少技術債。

  • 減少 Reviewer 時間
  • 降低別人修改您的程式碼錯誤
  • 確保程式碼品質

此教學會帶給大家三大部分

  1. 如何開始寫測試
  2. 使用 Testify 工具
  3. 平行測試



如何寫基本測試
25:04

本堂課透過 PHP 實際案例來學習 Go 語言 Interface

  1. PHP Interface Class 轉 Golang Struct

  2. 使用 Interface 為函數參數 (fmt 的 Stringer Interface)

  3. 儲存變數類型

用 PHP 範例學習 Go 語言 Interface 三大特性
28:33

本單元會介紹兩套驗證程式碼品質的工具及服務,希望對於大型專案會有幫助

1. https://golangci.com/

2. https://go-critic.github.io/overview

Preview 11:10

在現代開發專案時,一定會用到環境變數,像是讀取 AWS Secret Key 等等,在部署上面也會透過設定變數讓專案依據不同環境讀取不同環境變數,在 Go 語言內如何實現讀取環境變數,又可以讓開發者透過 .env 檔案動態改變環境變數,本影片用簡單的套件來實現。這個在其他語言的 Framework 都有實現,像是 Laravel 的 .env 設定

如何讀取專案內 .env 檔案
07:26
+ Go 目錄架構
2 lectures 24:27

此影片會教底下內容:

  1. project layout 基本簡介

  2. 為什麼要用 go module

  3. 使用 makefile

  4. .env 使用情境

  5. 如何設定專案版本資訊

Preview 16:14

Go 語言在 1.11 推出 go module 來統一市面上不同管理 Go 套件的工具,像是 dep 或 govendor 等,還不知道如何使用 go module,可以參考之前寫的一篇文章『Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具』,在團隊內如果每個人在開發專案時,都透過網路去下載專案使用到的套件,這樣 10 個人就會浪費 10 個人的下載時間,並且佔用公司網路頻寬,所以我建議在公司內部架設一台 Go Proxy 服務,減少團隊在初始化專案所需要的時間,也可以減少在跑 CI/CD 流程時,所需要花費的時間,測試過公司 CI/CD 流程,有架設 Go Proxy,一般來說可以省下 1 ~ 2 分鐘時間,根據專案使用到的相依性套件用量來決定花費時間。本篇來介紹如何架設 ATHENS 這套開源 Go Proxy 專案。

架設 Go Module Proxy Server 加速團隊開發及部署
08:13
+ Go 語言 goroutine 和 channel
12 lectures 02:27:28

如何將比較繁瑣的程式邏輯丟到背景執行,這時候就需要用到 Go 語言關鍵字 go

Preview 06:57

當專案有三個 Job 同時執行,該如何透過 sync.WaitGroup 方式來等待所有 Job 處理完畢才繼續執行

使用 sync WaitGroup 等待 goroutine 執行結束
04:16

五分鐘可以簡單了解 Go 語言重大特性 go channel 的兩種特性 buffered vs unbuffered,影片內用簡單的例子來介紹 channel,希望大家會喜歡

用五分鐘了解什麼是 buffered vs unbuffered channel
05:17
Channel 基礎使用方式
19:13

本課程直接用一個實際案例來帶大家了解如何使用 multiple channel,我們先來看看案例題目『透過 goroutine 跑 20 個 JOB』裡面需要實作底下項目:


* 使用 outChan 顯示各個 JOB 完成狀況

* 使用 errChan 顯示 JOB 發生錯誤並且跳出 main 主程式

* 使用 finishChan 通知全部 JOB 已經完成

* 設定 Timeout 機制 (1 秒之內要完成所有 job)

15 分鐘實戰 multiple channel 用法
15:06

Select 四大用法

  1. Random value

  2. Timeout 超時機制

  3. Check buffer channel is full

  4. Breaking for loop channel

Select 搭配 Channel 四種用法
17:50
實戰簡易的 Job Queue 機制
16:12

相信不少開發者肯定聽過 Go 語言之所以讓人非常喜歡,就是因為 Go concurrency,如果您對於 concurrency 不了解的朋友們,可以直接參考官網的範例開始了解,範例會帶您一步一步了解什麼是 Channel 什麼是 Go concurrency?本篇會介紹 Channel 使用時機,在大部分寫 application 時,老實說很少用到 Channel,所以很多人其實不知道該在哪種場景需要使用 Channel,底下這句名言大家肯定聽過:

Do not communicate by sharing memory; instead, share memory by communicating.

本篇會用簡單的例子來帶大家理解上述名言

使用 Go Channel 及 Goroutine 時機
15:57

我們該如何升級 Web 服務,你會說很簡單啊,只要關閉服務,上程式碼,再開啟服務即可,可是很多時候開發者可能沒有想到現在服務上面是否有正在處理的資料,像是購物車交易?也或者是說背景有正在處理重要的事情,如果強制關閉服務,就會造成下次啟動時會有一些資料上的差異,那該如何優雅地關閉服務,這就是本篇的重點了。

什麼是 HTTPD graceful shutdown
09:47

上一篇作者有提到『什麼是 graceful shutdown?』,本篇透過 docker-compose 方式來驗證 Go 語言的 graceful shutdown 是否可以正常運作。除了驗證之外,單機版 Docker 本身就可以設定 scale 容器數量,那這時候又該如何搭配 graceful shutdown 來實現 rolling update 呢?相信大家對於 rolling update 並不陌生,現在的 kubernetes 已經有實現這個功能,用簡單的指令就可以達到此需求,但是對於沒有在用 k8s 架構的開發者,可能網站也不大,那該如何透過單機本的 docker 來實現呢?

graceful shutdown 搭配 docker-compose 實現 rolling update
14:22

在閱讀本文章之前,作者有寫過一篇『graceful shutdown with multiple workers』此篇文章介紹了可以在服務停止前做一些正確的 Shutdown 流程,像是處理 Http Handler 或關閉資料庫連線等等,假設有服務內有實作 Worker 處裡多個 Job,那該如何等到全部的 Job 都執行完畢才正確關閉且刪除服務 (使用 Docker) 呢?

停止 Go 服務前先處理完 Worker 內的 Job
12:04
用 10 分鐘了解 context 使用場景及基本認識
10:27
+ Go 語言實戰 Goroutine 案例
5 lectures 40:48

MongoDB 是一套具有高效能讀寫的 NoSQL 資料庫,但是不像傳統關連式資料庫,有非常好用的 Transaction 交易模式,而在 MongoDB 也可以透過 Two Phase Commits 來達成交易功能,大家可以先打開文件看看,非常冗長,工程師需要花很多時間閱讀文件並且實現出來。而在 Go 語言內,我們可以在 Single Thread 內同一時間點讀寫存取同一筆資料庫來解決此問題

Preview 05:22

第一種就是透過 sync.Mutex 方式,直接將交易區段程式碼 lock 住,這樣可以避免同時寫入或讀出的問題

使用 sync.Mutex 解決交易問題
04:00

可以用 Go 語言內的優勢: goroutine + channel,在這邊我們只要建立兩個 Channle,第一個是使用者帳號 (string) 第二個是輸出 Result (struct)

使用 goroutine + Channel 設計單一 Queue
11:33

假設我們有 100 個帳號,開 10 個 Queue 去處理,每一個 Queue 來處理 10 個帳號,也就是說 ID 為 23 號的分給第 3 (23 % 10) 個 Queue,ID 為 59 號則分給第 9 個 Queue。

使用 goroutine + Channel 設計多重 Queue
11:28

假設需要擴展服務,執行超過一個服務,就會遇到 Optimistic concurrency control,原因在上述方法只能保證在單一服務內不會同時存取同一筆資料,但是如果是多個服務則還是會發生同時存取或寫入單筆資料。這邊可以用簡單的機制來解決應用層的問題,直接在資料表加上 Version,初始值為 1

使用 optimistic concurrency 解決多個 Application 問題
08:25
+ Go 語言實戰 GraphQL
8 lectures 01:06:29

這系列課程您會學到如下:

  • 什麼是 Facebook Account Kit?

  • 傳統 Restful API 優缺點

  • 什麼是 GraphQL 及為什麼要使用 GraphQL

  • GraphQL 在 Golang 內的 Framework 比較

  • 實作 Gin + GraphQL 取代傳統 Restful API

  • 搭配 Facebook Account Kit 認證

  • 實作 GraphQL 測試

Preview 03:52

此章節說明 Restful API 在前後端團隊合作上面有哪些缺陷,其中兩項一般來說大家都會遇到

1. 不同裝置需要不同欄位,像是 mobile 或平板畫面配置都會不同,會造成後端邏輯變得複雜

2. 後端線上文件都是由後端自動產生出來,但是在專案趕的時候,工程師就會忘記寫文件,造成文件 Out of Date,久而久之工程師再也不寫了,前後端溝通成本就提高了。

Preview 06:27
比較 GraphQL Framework 在 Go 語言效能
06:49

相信各位開發者對於 GraphQL 帶來的好處已經非常清楚,如果對 GraphQL 很陌生的朋友們,可以直接參考之前作者寫的一篇『Go 語言實戰 GraphQL』,內容會講到用 Go 語言實戰 GraphQL 架構,教開發者如何撰寫 GraphQL 測試及一些開發小技巧,不過內容都是以 graphql-go 框架為主。而本篇主題會講為什麼我從 graphql-go 框架轉換到 gqlgen。


從 graphql-go 轉換到 gqlgen 原因
19:52
+ Go 語言搭配 GitHub Actions
1 lecture 19:15

GitHub Actions 也推出一陣子了,本篇要來介紹如何透過 GitHub Actions 來部署 Go 語言服務,會用一個簡單 http 範例教大家如何透過 Docker 方式來更新。Go 語言基本服務流程大致上會是『測試 -> 編譯 -> 上傳 -> 啟動』,透過這四個步驟來學習 GitHub Actions 該如何設定。

  • 測試: Unit Testing 多一層保護

  • 編譯: 透過 go build 編譯出 Binary 檔案

  • 上傳: 寫 Dockerfile 將 Binary 包進容器內

  • 啟動: 透過 docker-compose 方式來更新服務

用 GitHub Actions 部署 Go 語言服務 (Docker 容器啟動)
19:15
+ Go 語言自動化部署 AWS Lambda
3 lectures 33:21
使用 apex/up 工具部署 Go 專案到 AWS Lambda
11:37
設定 Custom Domain Names 在 API Gateway 上
11:09
用 drone-apex-up 自動化更新 Go 專案到 AWS Lambda
10:35
Requirements
  • 只要有任一門語言基礎知識即可
Description

重要提醒:因此平台 Udemy 為境外公司,在 Udemy 的刷卡屬於境外刷卡,您的信用卡公司會另外向您收取大約 1.5% 的國外交易手續費。手續費根據各家信用卡公司規定有所不同,詳細數字需與您的發卡銀行確認。

Go 語言 (又稱 Golang) 是 Google 推出新一代的強大語言,2018 年 1 月 Google 公佈了去年底統計的問卷結果,發現 61% 用 Go 來寫網站,37% 用來開發系統程式,36% 用來做 DevOps (多重選擇),可想而知 Go 語言可以拿來從底層寫到上層。高效能的 Goroutine (併發) 表現優於 Parallelism (並行),語法上簡潔又簡單,這也就是為什麼我們要來嘗試 Go 語言。

課程大綱

  1. Go 背景介紹

  2. Go 環境建置

  3. Go 基本語法

  4. Go Goroutines 介紹

  5. Go Channel 介紹

  6. Go 簡易 HTTP 伺服器

  7. Go 簡易 Command Line 實作

  8. Go 跨平台編譯 (Windows, MacOS, Linux)

  9. Go 搭配 Docker 介紹

  10. Go 語言開發實戰案例

  11. Go 語言專案搭配 Drone 持續整合測試部署

  12. Go 實戰 GraphQL 語言

  13. Go 部署到 Heroku 平台

Who this course is for:
  • 後端工程師
  • 系統工程師
  • 網頁工程師
  • SRE 工程師