相信各位 Go 語言開發者陸陸續續都將專案從各種 Vendor 工具轉換到 Go Module,本篇會帶大家一步一步從舊專案轉換到 Go Module,或是該如何導入新專案,最後會結合 CI/CD 著名的兩套工具 Travis 或 Drone 搭配 Go Module 測試。
影片介紹
- 舊專案內 vendor 轉換成 go module 設定 (1:15)
- 新專案如何啟用 go module (6:20)
- 在 Travis CI 或 Drone 如何使用 go module (8:31)
- 在開源專案內並存 vendor 及 go module (介紹 Gin 如何使用 vendor 及 go module) (15:00)
更多實戰影片可以參考我的 Udemy 教學系列
舊專案
假設原本的專案有導入 vendor 工具類似 govendor 或 dep,可以在目錄底下找到 vendor/vendor.json
或 Gopkg.toml
,這時候請在專案目錄底下執行
$ go mod init github.com/appleboy/drone-line
$ go mod download
您會發現 go module 會從 vendor/vendor.json
或 Gopkg.toml
讀取相關套件資訊,接著寫進去 go.mod
檔案,完成後可以下 go mod dowload
下載所有套件到 $HOME/go/pkg/mod
新專案
新專案只需要兩個步驟就可以把相關套件設定好
$ go mod init github.com/appleboy/drone-line
$ go mod tidy
其中 tidy 可以確保 go.mod
或 go.sum
裡面的內容都跟專案內所以資料同步,假設在程式碼內移除了 package,這樣 tidy 會確保同步性移除相關 package。
整合 Travis 或 Drone
go module 在 1.11 版本預設是不啟動的,那在 Travis 要把 GO111MODULE
環境變數打開
matrix:
fast_finish: true
include:
- go: 1.11.x
env: GO111MODULE=on
完成後可以到 Travis 的環境看到底下 go get
紀錄
而在 Drone 的設定如下:
steps:
- name: testing
image: golang:1.11
pull: true
environment:
GO111MODULE: on
commands:
- make vet
- make lint
- make misspell-check
- make fmt-check
- make build_linux_amd64
- make test
結論
在開源專案內為了相容 Go 舊版本,所以 Gin 同時支援了 govendor 及 go module,其實還蠻難維護的,但是可以透過 travis 環境變數的判斷來達成目的:
language: go
sudo: false
go:
- 1.6.x
- 1.7.x
- 1.8.x
- 1.9.x
- 1.10.x
- 1.11.x
- master
matrix:
fast_finish: true
include:
- go: 1.11.x
env: GO111MODULE=on
git:
depth: 10
before_install:
- if [[ "${GO111MODULE}" = "on" ]]; then mkdir "${HOME}/go"; export GOPATH="${HOME}/go"; fi
install:
- if [[ "${GO111MODULE}" = "on" ]]; then go mod download; else make install; fi
- if [[ "${GO111MODULE}" = "on" ]]; then export PATH="${GOPATH}/bin:${GOROOT}/bin:${PATH}"; fi
- if [[ "${GO111MODULE}" = "on" ]]; then make tools; fi
詳細設定請參考 .travis 設定