Go mod使用指南

启用go mod

# 开启 MODULE
go env -w GO111MODULE=on
# 默认值为https://proxy.golang.org,direct
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct

GO111MODULE可以设置为:off、on、auto(默认值)

  • 为off时,则不使用go mod,查找依赖包的顺序是:当前项目根目录/vendor,其次是$GOPATH/src(这是Golang1.11版本之前的用法)。
  • 为on时,则开启go mod,查找依赖包是以当前项目根目录的go.mod文件为基准,会忽略 $GOPATH 和 vendor 文件夹,只根据go.mod下载依赖。
  • 为auto或未设置,则go命令根据当前目录启用或禁用模块支持。仅当当前目录位于$GOPATH/src之外且其本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。

GOPROXY为依赖包代理地址,由于像golang.org/x这种依赖包需要翻墙才能下载,所以建议设置成国内镜像地址:
https://goproxy.cn 为国内七牛云维护的GO的镜像地址。
https://goproxy.io 为国内另一个镜像地址。

初始化go.mod

进入项目根目录(假如目录名为project1),初始化一个moudle,模块名为你的项目名,必须为英文名称,允许字母数字下划线和/,但是不能以/开头。

go mod init [模块名]

执行完后,会在当前项目根目录下创建一个go.mod文件,内容如:

module project1
go 1.13

此时还没有任何依赖包信息。

整理依赖包

go mod tidy

命令执行后,go mod会去项目文件中发现依赖包,将依赖包名单添加到go.mod文件中,自动删除那些有错误或者没有使用的依赖包。

将依赖包拷贝到项目vendor

go mod vendor

在项目完工时,我们也可以把依赖包复制到项目根目录/vendor/,以便存档,其实也可以不做这个操作,有go.mod文档就够了。

其他常用命令

清理本地依赖包

go clean -modcache

添加单个依赖包

go mod edit -require=golang.org/x/text

移除单个依赖包

go mod edit -droprequire=golang.org/x/text

验证依赖是否正确

go mod verify

校验所有依赖包的正确性

go mod verify

go.mod文档说明

go.mod文件可以通过require,replace,exclude语句来说明依赖包的管理规则:
require语句用于指定必不可少的依赖包
replace语句用于指定需要替换依赖包的地址,比如golang.org/x/text包替换成github.com/golang/text
exclude语句用于指定可以忽略依赖项模块

replace (
    cloud.google.com/go => github.com/googleapis/google-cloud-go v0.34.0
    github.com/go-tomb/tomb => gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
    go.opencensus.io => github.com/census-instrumentation/opencensus-go v0.19.0
    go.uber.org/atomic => github.com/uber-go/atomic v1.3.2
    go.uber.org/multierr => github.com/uber-go/multierr v1.1.0
    go.uber.org/zap => github.com/uber-go/zap v1.9.1

    golang.org/x/crypto => github.com/golang/crypto v0.0.0-20181001203147-e3636079e1a4
    golang.org/x/lint => github.com/golang/lint v0.0.0-20181026193005-c67002cb31c3
    golang.org/x/net => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
    golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20180821212333-d2e6202438be
    golang.org/x/sync => github.com/golang/sync v0.0.0-20181108010431-42b317875d0f
    golang.org/x/sys => github.com/golang/sys v0.0.0-20181116152217-5ac8a444bdc5
    golang.org/x/text => github.com/golang/text v0.3.0
    golang.org/x/time => github.com/golang/time v0.0.0-20180412165947-fbb02b2291d2
    golang.org/x/tools => github.com/golang/tools v0.0.0-20181219222714-6e267b5cc78e
    google.golang.org/api => github.com/googleapis/google-api-go-client v0.0.0-20181220000619-583d854617af
    google.golang.org/appengine => github.com/golang/appengine v1.3.0
    google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20181219182458-5a97ab628bfb
    google.golang.org/grpc => github.com/grpc/grpc-go v1.17.0
    gopkg.in/alecthomas/kingpin.v2 => github.com/alecthomas/kingpin v2.2.6+incompatible
    gopkg.in/mgo.v2 => github.com/go-mgo/mgo v0.0.0-20180705113604-9856a29383ce
    gopkg.in/vmihailenco/msgpack.v2 => github.com/vmihailenco/msgpack v2.9.1+incompatible
    gopkg.in/yaml.v2 => github.com/go-yaml/yaml v0.0.0-20181115110504-51d6538a90f8
    labix.org/v2/mgo => github.com/go-mgo/mgo v0.0.0-20160801194620-b6121c6199b7
    launchpad.net/gocheck => github.com/go-check/check v0.0.0-20180628173108-788fd7840127
)

go get的使用

查看指定包可以下载的版本

go list -m -versions github.com/gogf/gf

下载项目依赖

go get ./...

拉取最新的版本(优先择取 tag)

go get golang.org/x/text@latest

拉取 master 分支的最新 commit

go get golang.org/x/text@master

拉取 tag 为 v0.3.2 的 commit

go get golang.org/x/text@v0.3.2

拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2:

go get golang.org/x/text@342b2e

指定版本拉取,拉取v3版本

go get github.com/smartwalle/alipay/v3

更新

go get -u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MossGrower

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值