簡介
Golang 官方在 1.11 版推出的相依套件管理工具,還是在測試階段(會在1.13正式登場)
他在 2018/3/20 提交,並於 2018/5/21 被接受
想使用他的話,要開個開關:
環境變數 GO111MODULE
控制行為:
off
: go command 不使用 modules 功能,而是沿用舊有的 GOPATH 模式on
: 強制使用 modules 功能,只根據 go.mod 下載 dependency 而完全忽略 GOPATH 以及 vendor 目錄auto
: Golang 1.11 預設值,go command 根據當前工作目錄狀態決定是否啟用 modules 功能,滿足任一條件時才啟動此功能:- 當前目錄位於 GOPATH/src 之外並且包含 go.mod 文件
- 當前目錄位於包含 go.mod 文件的目錄下
因此,我們的第一步就是開啟他
export GO111MODULE=on
來吧,新專案
mkdir goModTest
cd goModTest
main.go
// at goModTest/main.go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/health", GetHealthHandler)
s := &http.Server{
Addr: ":8000",
Handler: router,
}
s.ListenAndServe()
}
// GetHealthHandler - GET /health to expose service health
func GetHealthHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"code": 0,
"message": "Service is alive!",
})
}
我們在 main.go
裡面用了 gin
這個 web framework
go mod init # 產生 go.mod
go build # 編譯時會去下載缺少的相依套件
執行完後發現 go.mod
中多了幾個相依套件
還多了一個 go.sum
, 他就像是其他語言的 .lock
一樣,是用來記錄安裝的版本
tidy
自動幫你檢查你的程式碼中使用到的外部引用, 幫你加入你需要的也幫你移除你用不到的
go mod tidy
Vendor
預設的情況下,go mod 幫你把相依套件下載到 $GOPATH
不過你希望有放在專案目錄下的話…
go mod tidy # 先做個整理,才不會多下載
go mod vendor
import local package
可以直接 import 專案下的模組,go.mod
知道你目前的位置在 goModTest
也就是寫在 go.mod
的第一行 module goModTest
// 程式裡面這樣引用自己專案的package
import dataapi "goModTest/pkg/myapi"
Reference
官方連結 https://github.com/golang/go/wiki/Modules 你看人家 Drone 也用了 https://github.com/drone/drone https://www.lightblue.asia/golang-1-11-new-festures-modules https://www.lightblue.asia/go-modules-with-insecure-git/