go mod replace

 Introduction to Go Modules – Roberto Selbach https://roberto.selbach.dev/intro-to-go-modules/

go mod使用 - 简书 https://www.jianshu.com/p/760c97ff644c

 

一个包管理工具应该有以下功能:
基本功能

  1. 依赖管理
  2. 依赖包版本控制
  3. 对应的包管理平台
  4. 可以私有化部署

加分:

    1. 代码包是否可以复用
    2. 构建,测试,打包
    3. 发布上线

没有使用go mod之前的问题。

使用go path问题

  1. 代码开发必须在go path src目录下,不然,就有问题。
  2. 依赖手动管理
  3. 依赖包没有版本可言

从这个看, go path不算包管理工具

govendor

  1. 解决了包依赖,一个配置文件就管理
  2. 依赖包全都下载到项目vendor下,每个项目都把有一份。拉取项目时,开始怀疑人生。

go mod介绍

go modules 是 golang 1.11 新加的特性。现在1.12 已经发布了,是时候用起来了。Modules官方定义为:

模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

go mod 有以下命令:

命令说明
download download modules to local cache(下载依赖包)
edit edit go.mod from tools or scripts(编辑go.mod)
graph print module requirement graph (打印模块依赖图)
verify initialize new module in current directory(在当前目录初始化mod)
tidy add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
vendor make vendored copy of dependencies(将依赖复制到vendor下)
verify verify dependencies have expected content (验证依赖是否正确)
why explain why packages or modules are needed(解释为什么需要依赖)

比较常用的是 init,tidy, edit

go get升级

  • 运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
  • 运行 go get -u=patch 将会升级到最新的修订版本
  • 运行 go get package@version 将会升级到指定的版本号version
  • 运行go get如果有版本的更改,那么go.mod文件也会更改

使用replace替换无法直接获取的package

由于某些已知的原因,并不是所有的package都能成功下载,比如:golang.org下的包。

modules 可以通过在 go.mod 文件中使用 replace 指令替换成github上对应的库,比如:

replace (
    golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a


 

 

GO111MODULE

GO111MODULE 有三个值:off, on和auto(默认值)。

GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:



作者:若与
链接:https://www.jianshu.com/p/760c97ff644c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
 
 

module declares its path as: go.etcd.io/bbolt,but was required as: github.com/coreos/bbolt · Issue #11749 · etcd-io/etcd https://github.com/etcd-io/etcd/issues/11749

cat go.mod
module Test

go 1.16

replace (
github.com/coreos/bbolt => go.etcd.io/bbolt v1.3.5
go.uber.org/atomic => github.com/uber-go/atomic v1.5.0
google.golang.org/grpc => google.golang.org/grpc v1.29.1
)

require (
github.com/PuerkitoBio/goquery v1.6.1
github.com/aliyunmq/mq-http-go-sdk v1.0.3
github.com/cloopen/go-sms-sdk v0.0.0-20200702015230-7c5619f80c9e
github.com/coreos/bbolt v0.0.0-00010101000000-000000000000 // indirect
github.com/coreos/etcd v3.3.25+incompatible // indirect
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
github.com/go-kratos/kratos v1.0.0
github.com/gogap/errors v0.0.0-20200228125012-531a6449b28c // indirect
github.com/gogap/stack v0.0.0-20150131034635-fef68dddd4f8 // indirect
github.com/gogo/protobuf v1.3.2
github.com/golang/protobuf v1.5.2
github.com/google/wire v0.5.0
github.com/qiniu/api.v7/v7 v7.8.2
github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726
github.com/valyala/fasthttp v1.24.0 // indirect
go.etcd.io/etcd v3.3.25+incompatible
go.mongodb.org/mongo-driver v1.5.1
google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab
google.golang.org/grpc v1.36.1
)

 

posted @ 2021-04-30 11:31  papering  阅读(3070)  评论(0编辑  收藏  举报