Go module机制

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/[email protected]"
# 需要使用 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/[email protected]
go get github.com/spf13/cobra@master

你可能感兴趣的:(golang)