Go module机制
从go1.11开始支持
可以不需要gopath存在
环境变量GO111MODULE,默认为auto
项目存在go.mod则使用go module,否则使用GOPATH和vendor机制
一、使用
1.新建项目名目录
mkdir mypro
2.使用go mod
初始化项目
cd mypro
go mod init mypro
3.在项目代码中添加外部依赖
[root@vultr mypro]# cat main.go
package main
import (
"github.com/spf13/viper"
"fmt"
)
func main(){
viper.SetConfigFile("")
fmt.Println("viper")
}
[root@vultr mypro]#
4.更新依赖关系,下载依赖包
[root@vultr mypro]# go mod tidy
go: finding github.com/spf13/viper v1.3.1
go: downloading github.com/spf13/viper v1.3.1
go: finding github.com/hashicorp/hcl v1.0.0
go: downloading github.com/BurntSushi/toml v0.3.1
...
[root@vultr mypro]# ls
go.mod go.sum main.go
[root@vultr mypro]# cat go.sum #记录的是依赖的包和它自身依赖的包的版本记录
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
...
[root@vultr mypro]# cat go.mod
module mypro
require (
github.com/BurntSushi/toml v0.3.1 // indirect
github.com/spf13/viper v1.3.1
)
[root@vultr mypro]# #有indirect的表示简洁依赖,即是非当前module直接import
5.代码编译
go build -mod=readonly
# 在这个模式下任何会导致依赖关系变动的情况都将导致build失败,
# 前面提到过build能查找并更新依赖关系,
# 使用这个选项可以检查依赖关系的变动。
go build -mod=vendor
# 忽略cache里的包,只使用vendor目录里的版本
6.修改依赖关系
go mod edit -require="github.com/spf13/viper@v1.3.0"
# 需要使用 go mod tidy 才能更新依赖关系
7.使用vendor
模式,将依赖包下载并放入vendor
- 常常与
go build -mod=vendor
搭配使用
go mod vendor
8.搭配go get
使用
go get github.com/spf13/cobra
go get github.com/spf13/cobra@v0.3.1
go get github.com/spf13/cobra@master