> 原文來自:『Go Module 導入到專案內且搭配 Travis CI 或 Drone 工具』
<a href='https://photos.google.com/share/AF1QipPZ8MkcLAazbfRWwBrT1CQpipCL8N_1uAcYosJmJ-o6du2XRRHNEokVarxey5Bp8w?key=clctLU9JYVMzcEdHYWR2dUlVTVZ6YnZUUjlYRG9B&source=ctrlq.org'><img; src='https://lh3.googleusercontent.com/Q5CP9S-xtRHxnDRvxDpWWkvBsEVw5C5uRyb5EiBh-UpYkrp_dkZp_oN8yi1WtqwruhSgnwNMB5QjJPxO94ABjG9oLBqmcRjlouNTNmrChIWbQcsAAbuV9eWB1wbsK-x-OY6iolb5ahc=w2400' /></a>
相信各位 Go 語言開發者陸陸續續都將專案從各種 Vendor 工具轉換到 Go Module,本篇會帶大家一步一步從舊專案轉換到 Go Module,或是該如何導入新專案,最後會結合 CI/CD 著名的兩套工具 Travis 或 Drone 搭配 Go Module 測試。
更多實戰影片可以參考我的 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 mode tidy
其中 tidy 可以確保 go.mod 或 go.sum 裡面的內容都跟專案內所以資料同步,假設在程式碼內移除了 package,這樣 tidy 會確保同步性移除相關 package。
go module 在 1.11 版本預設是不啟動的,那在 Travis 要把 GO111MODULE
環境變數打開
matrix:
fast_finish: true
include:
- go: 1.11.x
env: GO111MODULE=on
完成後可以到 Travis 的環境看到底下 go get
紀錄
<a href='https://photos.google.com/share/AF1QipOdciWDnbJ3B9GsdYMXJqZbjtNE6rVMSvPSSFavowykZXxvZsATX_aA_Tib3q88aw?key=eWFTcDNIeGhjWlRJSzFaVjhKRFZ3a0YyMXlqcm5B&source=ctrlq.org'><img; src='https://lh3.googleusercontent.com/GRLzV6tA4qUB7kBMqf4jJ341-cRfgzVz-0PhhrtO-shEP2S7fijs3gTzdlWHkX8wLUOtYaguHbIUWjYihnXg8G2-w6LJG9V92g1pZlmatre1ZyY6uh5ChPU-CszxUWm1uDxo-Lc6oMI=w2400' /></a>
而在 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 設定