Linux下的GoPath转go mod
网上很多go mod 的使用都是重新在go path目录外新建了项目,但是往往我们用的时候以有项目,所以在gopath的src目录下尝试了一下,遇到了很多坑,现总结如下。1. 在配置文件中设置 export GO111MODULE=on(.vimrc 或.bash_profile)GO111MODULE 的取值为 off, on, or auto (默认值)off: GOPATH mode,...
网上很多go mod 的使用都是重新在go path目录外新建了项目,但是往往我们用的时候以有项目,所以在gopath的src目录下尝试了一下,遇到了很多坑,现总结如下。
1. 在配置文件中设置 export GO111MODULE=on(.vimrc 或.bash_profile)或直接执行这行语句
GO111MODULE 的取值为 off, on, or auto (默认值)
off: GOPATH mode,查找vendor和GOPATH目录
on:module-aware mode,使用 go module,忽略GOPATH目录
auto:如果当前目录不在$GOPATH 并且 当前目录(或者父目录)下有go.mod文件,则使用 GO111MODULE, 否则仍旧使用 GOPATH mode
若在GoPath目录下配置go mod,则需要手动设置为on
2. 在项目目录下执行 go mod init 名字
出现下面代码表示创建成功
go: creating new go.mod: module 名字
若从dep中转到mod,则成功后显示如下
3. 设置网络代理
因为已有的项目中可能会用到golang.org/x的包,若不翻墙则无法执行后续步骤,若无需要可跳过此步。
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=$http_proxy
export GOPROXY=https://goproxy.io
4. 执行 go mod tidy,完成后项目路径下会生成go.mod和go.sum
go mod tidy:检查,删除错误或者不使用的modules,下载没download的package
5. go build
执行成功则表示完成
若出现依赖包未更新的问题,例如
则需要手动更新依赖
首先在go.mod 或 go.sum中找到需要更新的依赖包
go get 依赖包@latest
// go get newgit.op.ksyun.com/golang-vc/models.git@latest
当我们使用 go build、go test等,Go 会自动更新 go.mod 文件的依赖关系
由于是在go path目录中使用,若不需要使用go mod而是vendor时,执行 go build -mod=vendor
go mudules 版本规则:vX.0.0-yyyymmddhhmmss-abcdefabcdef
vX.Y.Z 是标签版本,go modules是根据标签来确定版本号的。
yyyymmddhhmmss 是时间戳
abcdefabcdef是hash值,我们自己指定版本时只需要制定版本号即可,没有版本tag的则需要找到对应commit的时间和hash值。
go get
首先,go get解析需要新增哪些依赖。可以通过在包名后添加@version或者@branch等方式来取代命令的默认更新行为。如果后缀指定为@none,则表明该依赖应该被移除。
其次,go get会下载、编译、安装指定的包。例如使用go get golang.org/x/perf/cmd/…来更新cmd下的所有子包。
运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
运行 go get -u=patch 将会升级到最新的修订版本
运行 go get package@version 将会升级到指定的版本号version
运行go get如果有版本的更改,那么go.mod文件也会更改
go get -v newgit.op.ksyun.com/golang-vc # 匹配最新的一个 tag
go get newgit.op.ksyun.com/golang-vc@latest # 匹配最新的tag
go get -v newgit.op.ksyun.com/golang-vc@v1.6.2 # 匹配 v1.6.2
go get newgit.op.ksyun.com/golang-vc@e3702bed2 # 匹配 v1.6.2
go get newgit.op.ksyun.com/golang-vc@c856192 # 匹配 c856192
go get newgit.op.ksyun.com/golang-vc@master # 匹配 master 分支
latest 匹配最新的 tag。
v1.2.6 完整版本的写法。
v1、v1.2 匹配带这个前缀的最新版本,如果最新版是 1.2.7,它们会匹配 1.2.7。
c856192 版本 hash 前缀、分支名、无语义化的标签,在 go.mod 里都会会使用约定写法 v0.0.0-20180517173623-c85619274f5d,也被称作伪版本
参考自:https://www.cnblogs.com/shengulong/p/10798798.html
直接拉取别人工程中的go.mod
进入go.mod,对比版本号是否正确,若修改则在退出后执行go mod tidy
若依赖找不到则go get ,同上
----------------------------------------------分割线----------------------------------------------------------
gopath 与go mod的区别
GOPATH中import包存放在 GOPATH/src 目录下
Go Module功能开启后,下载的包将存放与$GOPATH/pkg/mod路径
后续遇到问题会继续更新。。。
更多推荐
所有评论(0)