golang 之 go module


什么是go module

  go module是go1.11版本之后推出來的版本管理工具,並且在go1.13之后默認支持。使用go module之后可以輕松的幫你告別gopath,那么什么是gopath呢?

GOPATH

  GOPATH是go的環境變量,設置GOPATH

vi /etc/profile
export GOROOT=/usr/local/go  #設置為go安裝的路徑
export GOPATH=$HOME/gocode   #默認安裝包的路徑
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

 其中GOPATH包含3個子目錄,為

  • src存放源代碼(比如:.go .c .h .s等)
  • pkg編譯時生成的中間文件(比如:.a)
  • bin編譯后生成的可執行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)

環境准備

  go1.11版本后啟用go module需要開啟GO11MODULE,並且確保項目不在GOPATH中。設置參數為on, off, auto

  • 111MODULE=off禁用模塊支持,編譯時會從GOPATHvendor文件夾中查找包。
  • GO111MODULE=on啟用模塊支持,編譯時會忽略GOPATHvendor文件夾,只根據 go.mod下載依賴。
  • GO111MODULE=auto,當項目在$GOPATH/src外且項目根目錄有go.mod文件時,開啟模塊支持。

 當參數設置為on,開啟成功。使用時會生成go.mod和go.sum兩個文件。

 加速下載,設置GOPROXY

go1.11版本后可設置: export GOPROXY=https://goproxy.cn
go 1.13版本默認為:   export GOPROXY=https://proxy.golang.or(在國內很慢)

所有我一般設置為https://goproxy.cn 或阿里源 https://mirrors.aliyun.com/goproxy/

初始化 

  常用命令

go mod download    下載依賴的module到本地cache(默認為$GOPATH/pkg/mod目錄)
go mod edit        編輯go.mod文件
go mod graph       打印模塊依賴圖
go mod init        初始化當前文件夾, 創建go.mod文件
go mod tidy        增加缺少的module,刪除無用的module
go mod vendor      將依賴復制到vendor下
go mod verify      校驗依賴
go mod why         解釋為什么需要依賴

  比如對於從git拉取到本地的項目可直接使用go mod tidy生成依賴包。而對於一個新項目,則可使用go mod init 初始化

go mod vender

  go mod vendor 會復制modules下載到vendor中, 貌似只會下載你代碼中引用的庫,而不是go.mod中定義全部的module。

go get & replace

  對於項目中的新包可以使用go get 去下載。如

  • 運行go get -u將會升級到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號, y是次要版本號)
  • 運行go get -u=patch將會升級到最新的修訂版本
  • 運行go get package@version將會升級到指定的版本號version

 replace本地包替換

  基於國內防火牆的問題,可以使用,如

replace packagepath/pkg v0.0.0 => github.com/packagepath/pkg v0.0.0

godep

  在引用go mod 之前。go采用godep來管理目錄。或者直接本地GOPATHL路徑(GOPATH過於繁瑣)

  安裝

go get github.com/tools/godep

  使用時會引用一個vendor目錄,這樣代碼會首先去查找vendor目錄

├── Gopkg.lock
├── Gopkg.toml
├── main.go
└── vendor
    ├── github.com
    │   ├── gin-contrib
    │   ├── gin-gonic
    │   ├── golang
    │   ├── mattn
    │   └── ugorji
    ├── golang.org
    │   └── x
    └── gopkg.in
        ├── go-playground
        

 常用命令

godep save     將依賴項輸出並復制到Godeps.json文件中
godep go       使用保存的依賴項運行go工具
godep get      下載並安裝具有指定依賴項的包
godep path     打印依賴的GOPATH路徑
godep restore  在GOPATH中拉取依賴的版本
godep update   更新選定的包或go版本
godep diff     顯示當前和以前保存的依賴項集之間的差異
godep version  查看版本信息

 比如你在新項目中使用godep save時會在當前項目中創建Godepsvender兩個文件夾。

小結

  在go1.13后默認支持go mod,所以還是最好使用go mod,並且管理項目也很方便快捷。

  一般情況,go mod init 和 go mod tidy 兩個命令就夠用了。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM