Go 語言基礎實戰 (開發, 測試及部署)
4.3 (45 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.
134 students enrolled

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

全面介紹了 Go 語言的特點、安裝部署環境、語言語法、併發流程以及在多個實戰中的應用,並介紹如何整合 CI/CD 服務
4.3 (45 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.
134 students enrolled
Created by Bo-Yi Wu
Last updated 4/2019
Traditional Chinese
Current price: $51.99 Original price: $129.99 Discount: 60% off
30-Day Money-Back Guarantee
This course includes
  • 9 hours on-demand video
  • 3 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to Udemy's top 3,000+ 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 53 lectures 09:09:02
+ Go 環境介紹
7 lectures 01:09:47

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 基礎介紹
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 語言 goroutine 和 channel
4 lectures 35:43

如何將比較繁瑣的程式邏輯丟到背景執行,這時候就需要用到 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
+ 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
7 lectures 46:37

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

  • 什麼是 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
+ 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
+ Go 語言搭配 Drone CI/CD 自動化測試部署
6 lectures 01:25:15
Go 專案編譯多種 OS 執行檔 (ARM64, AMD64 或 i386)
09:05
Go 專案編譯 Docker 映像檔並且上傳到 Docker Hub
08:44

在之前寫過一篇『Drone 搭配 Kubernetes 升級應用程式版本』,裡面內容最主要介紹 honestbee 撰寫的 drone 外掛: drone-kubernetes,但是此外掛並非用 Go 語言所撰寫,而是用 Shell Script 透過 kubectl set image 方式來更新專案項目,但是這邊會有幾個缺點,第一點就是假設在 Develop 環境永遠都是吃 master 分支,也就是讀取 Image 的 latest 標籤,這時候此外掛就無法作用,第二點此外掛無法讀取 kubernetes YAML 檔案,假設專案要修正一個 ENV 值,此外掛也無法及時更新。綜合這兩點因素,只好捨棄此外掛,而本篇會帶給大家另一個用 Go 語言所撰寫的外掛,是由 @Sh4d1 所開發的項目,用法相當容易,底下會一步一步教大家如何部署 Go 語言項目。

Go 專案搭配 Kubernetes 部署
20:45

相信大家在架設服務肯定會選一套像是 HAProxy, Nginx, Apache 或 Caddy,這四套架設的難度差不多,如果要搭配 Let’s Encrypt 前面兩套需要自己串接 (Nginx, Apache),而 Caddy 是用 Golang 開發裡面已經內建了 Let’s Encrypt,,管理者不用擔心憑證過期,相當方便。但是本篇我要介紹另外一套工具叫 Traefik,這一套也是用 Go 語言開發,而我推薦這套的原因是,此套可以跟 Docker 很深度的結合,只要服務跑在 Docker 上面,Traefik 都可以自動偵測到,並且套用設定。透過底下的範例讓 Traefik 串接後端兩個服務,分別是 domain1.com 及 domain2.com。來看看如何快速設定 Traefik。

Go 專案使用 Docker 搭配 Traefik 自動化部署
20:19

Heroku 提供免費方案,讓開發者可以快速的建置 Demo 網站,本影片使用 Go 語言來建置 API 並且搭配 Heroku 提供的兩種方式部署:


1. 使用 Git 方式

2. 使用 Docker 方式


個人建議使用 Docker 方式,原因是未來不想使用 Heroku 時,可以快速把 Docker 部署到其他雲平台,像是 AWS, Linode 或 Digital Ocean 等平台。



Go 專案部署到 Heroku 雲平台
18:59
Requirements
  • 只要有任一門語言基礎知識即可
Description

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

溫馨提醒:即日起在課程右上「有優惠券嗎?」(Have a coupon?)輸入「GOLANG2019」,即可享優惠!(海外用戶因幣別不同,優惠折扣會略有差異)

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. 部署到 Heroku 平台

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