天天看點

Golang的子產品管理Module

Golang 1.11版本終于支援了官方的子產品依賴管理功能,1.11以前想要實作依賴管理隻能夠通過借助第三方庫來實作,1.11以前的版本Golang項目必須依賴以GOPATH,從目前版本開始Golang項目可以完全脫離GOPATH目錄而工作,GOPATH将會逐漸被移除;

Go Module

  Go mod的使用也比較簡單,Golang新增了環境變量GO11MODULE用于控制對Module的支援;

  GO111MODULE = off

  關閉Module的支援,從GOPATH、vendor目錄查找包

  GO111MODULE = auto

  根據目前目錄情況啟用Module支援或禁用,隻當項目不在GOPATH/src目錄當中,并且目前目錄中存在go.mod檔案時啟用Module;

  GO111MODULE = on

  啟用Module支援;

指令介紹

go mod download:下載下傳子產品到本地緩存

go mod edit:編輯go.mod檔案

go mod graph:輸出列印目前項目的依賴圖

go mod init:建立新子產品到目前目錄

go mod vendor:将依賴拷貝到vendor目錄下

go mod tidy:整理子產品,移除為使用子產品,添加缺少子產品

go mod verify:驗證子產品正确性

go mod why:查找依賴

通過Golang Module建立子產品

1、初始化子產品

  建立項目modtest目錄,進入modtest目錄:

  執行 go mod init modtest初始化子產品,可以看到初始化完成後目前目錄下生成了一個go.mod檔案,由于時剛初始化子產品是以打開檔案可以看到檔案中隻有一行:

  module modtest

2、在目前子產品中引用其他第三方子產品

  建立test.go檔案

package main

 import(
         "fmt"
         "github.com/go-redis/redis"
 )

 func main(){
    fmt.Println("引用第三方子產品 ",redis.Client{})
 }
           

  執行go mod tidy 下載下傳依賴,執行go run、go build 同樣會下載下傳依賴;

Golang的子產品管理Module

  執行完成後檢視go.mod即可看到相關依賴資訊,在GOPATH/pkg/mod目錄下可以看得到Golang module下來的所依賴的第三方包;

  此時的go.mod已經配置了子產品所依賴的第三方包,go.mod内容如下:

3、在目前子產品引用包

  在目前目錄下建立 submod包(目錄),進入submod目錄建立sub.go檔案

package submod

 func Name(){

 }
           

  在項目根目錄,修改test.go目錄引用submod包

package main

 import(
  "fmt"
  "github.com/go-redis/redis"
  "modtest/submod"
 )

 func main(){
  fmt.Println("測試 ",redis.Client{})
  fmt.Println("包引用 ",submod.Name)
 }
           

4、使用module代理

  由于某些原因,某些包不FQ時不可以直接下得下來的,還好go mod提供了代理的設定,并且還提供了https://goproxy.io 代理服務,我們可以通過設定代理,下載下傳golang.org/x/text等無法直接下載下傳的第三方包;

  set GOPROXY = https://goproxy.io