Go Module 入門使用

對於Go的版本管理主要用過 glide,下面介紹 Go 1.11 以後官方支持的版本管理工具 mod。html

關於 mod 官方給出了三個命令 go help modgo help modulesgo help module-get 幫助瞭解使用。git

設置 GO111MODULE

能夠用環境變量 GO111MODULE 開啓或關閉模塊支持,它有三個可選值:off、on、auto,默認值是 auto。github

  • GO111MODULE=off 無模塊支持,go 會從 GOPATH 和 vendor 文件夾尋找包。
  • GO111MODULE=on 模塊支持,go 會忽略 GOPATH 和 vendor 文件夾,只根據 go.mod 下載依賴。
  • GO111MODULE=auto 在 $GOPATH/src 外面且根目錄有 go.mod 文件時,開啓模塊支持。

在使用模塊的時候,GOPATH 是無心義的,不過它仍是會把下載的依賴儲存在 $GOPATH/pkg/mod 中,也會把 go install 的結果放在 $GOPATH/bin 中。golang

Go Mod 命令

download    download modules to local cache (下載依賴的module到本地cache))
edit        edit go.mod from tools or scripts (編輯go.mod文件)
graph       print module requirement graph (打印模塊依賴圖))
init        initialize new module in current directory (再當前文件夾下初始化一個新的module, 建立go.mod文件))
tidy        add missing and remove unused modules (增長丟失的module,去掉未用的module)
vendor      make vendored copy of dependencies (將依賴複製到vendor下)
verify      verify dependencies have expected content (校驗依賴)
why         explain why packages or modules are needed (解釋爲何須要依賴)

Go Mod 使用

建立 go.mod 文件

在一個新的項目中,須要執行go mod init 來初始化建立文件go.modgo.mod 中會列出全部依賴包的路徑和版本。json

module github.com/xfstart07/watcher

require (
    github.com/apex/log v1.0.0
    github.com/fatih/color v1.7.0 // indirect
    github.com/fsnotify/fsnotify v1.4.7
    github.com/go-ini/ini v1.38.2
    github.com/go-kit/kit v0.7.0
    github.com/go-logfmt/logfmt v0.3.0 // indirect

indirect 表示這個庫是間接引用進來的。緩存

go mod vendor 命令能夠在項目中建立 vendor 文件夾將依賴包拷貝過來。ide

go mod download 命令用於將依賴包緩存到本地Cache起來。工具

顯示全部Import庫信息

go list -m -json all
  • -json JSON格式顯示
  • all 顯示所有庫

Mod Cache 路徑

默認在$GOPATH/pkg 下面:ui

$GOPATH/pkg/mod

咱們來看看一個項目下載下來的文件形式:code

➜  mod ls -lh cache/download/github.com/go-kit/kit/@v/
total 3016
-rw-r--r--  1 a1  staff     7B Sep 29 15:37 list
-rw-------  1 a1  staff    50B Sep 29 15:37 v0.7.0.info
-rw-------  1 a1  staff    29B Sep 29 15:37 v0.7.0.mod
-rw-r--r--  1 a1  staff   1.5M Sep 29 15:37 v0.7.0.zip
-rw-r--r--  1 a1  staff    47B Sep 29 15:37 v0.7.0.ziphash

能夠看出項目庫會對每一個版本建立一個文件夾,文件夾下有對於版本的信息。

資料

相關文章
相關標籤/搜索