什麼是Go Modules
Go Modules 是 Golang 官方最近幾個版本推出的原生的包管理方式,類似於php的composer、java的maven
1、使用方式
我的版本:
go version go1.13.6 windows/amd64
使用前需要開啓環境變量 GO111MODULE off/on/auto
go env -w GO111MODULE=on
在 GOPATH 之外創建一個項目test,包含一個 main.go 文件,內容如下:
package main
import (
"github.com/labstack/echo"
"net/http"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
在該項目根目錄下執行,會在根目錄下生成go.mod文件,這個文件中標識了我們的項目的依賴的 package 的版本。執行 init 暫時還沒有將所有的依賴管理起來。我們需要將程序 run 起來(比如執行 go run/test),或者 build(執行命令 go build)的時候,纔會觸發依賴的解析
go mod init test
執行該文件 go run main.go,go.mod文件變成了這樣
module echo
go 1.13
require (
github.com/labstack/echo v3.3.10+incompatible
github.com/labstack/gommon v0.3.0 // indirect
github.com/mattn/go-colorable v0.1.6 // indirect
github.com/valyala/fasttemplate v1.1.0 // indirect
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d // indirect
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
golang.org/x/text v0.3.2 // indirect
)
同時我們發現項目目錄下多了一個 go.sum 用來記錄每個 package 的版本和哈希值。go.mod 文件正常情況會包含 module 和 require 模塊,除此之外還可以包含 replace 和 exclude 模塊。
這些 package 並不是直接存儲到 $GOPATH/src,而是存儲到 $GOPATH/pkg/mod 下面,不同版本並存的方式
進階知識
因爲衆所周知的原因,下載依賴包會出現各種稀奇古怪的事情,歸根結底就是網絡問題,所以要想規避類似問題,需要切換源,然後就能體驗飛速下載的感覺了
go env -w GOPROXY=https://goproxy.cn,direct
文章引用:https://zhuanlan.zhihu.com/p/82109036