go modules使用

什麼是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章