go项目管理
GOPATH
传统gopath的弊端
无版本控制概念
无法同步-致第三方版本号
无法指定当前项目引用的第三方版本号
go mod 指令
go mod init生成go.mod文件
go mod download下载go.mod文件中指明的所有依赖
go mod tidy整理现有的依赖
go mod graph查看现有的依赖结构
go mod edit编辑go.mod文件
go mod vendor导出项目所有的依赖到vendor目录
go mod verify校验一个模块是否被篡改过
go mod why查看为什么需要依赖某模块
go mod 环境变量
GO111MODUL
是否开启 go module模式
GOPROXY
项目的第三方依赖库的下载源地址
都建议设置国内的地址
阿里云 https://mirrors.aliyun.com/ goproxy/
七牛云 https:// goproxy.cn,direct
direct 用于指示Go回源到模块版本的源地址去抓取(比如GitHub等)
GOSUMDB
用来校验拉取的第三方库是否是完整的
默认也是国外的网站,如果设置了GOPROXY,这个就不用设置了
GONOPROXY 通过设置GOPRIVATE即可
GONOSUMDB 通过设置GOPRIVATE即可
GOPRIVATE
go env -W GOPRIVATE="git.example.com.github.com/ aceld/zinx
表示git.example.com和github.com/aceld/zinx 是私有仓库,不会进行GOPROXY下载和校验
go evn -W GOPRIVATE="*.example.com'
表示所有模块路径为example.com的子域名,比如git.example.com或者hello.example.com都不进行GOPROXY下载和校验
通过go env来查看环境变量
go env -W GO111MODULE =on
或者通过Linux export环境方式也可以
使用 Go Modules初始化项目
开启Go Modules模块
保证GO111MODULE=on
go env -w GO111MODULE=on
初始化项目
任意文件夹创建一个项目(不要求在$GOPATH/src)
创建go.mod文件,同时起当前项目的模块名称
在该项目编写源代码
如果源代码中依赖某个库(比如: github.com/ aceld/zinx/znet)
手动down go get github.com/ aceld/zinx/znet
自动down
go mod文件会添加一行新代码
require github.com/ aceld/zinx v0.0.0- -20200315073925- _f09df55dc746 // indirect
含义当前模块依赖github.com/aceld/zinx
依赖的版本是v0.0.0- -20200315073925- f09df55dc746
//indirect
表示间接依赖 因为项目直接依赖的是znet包 所以所间接依赖zinx包
会生成一个go.sum文件
go.sum⽂件的作⽤ 罗列当前项⽬直接或间接的依赖所有模块版本,保证今后项⽬依赖的版本不会被篡改
h1:hash 表示整体项⽬的zip⽂件打开之后的全部⽂件的校验和来⽣成的hash 如果不存在,可能表示依赖的库可能⽤不上
xxx/go.mod h1:hash go.mod⽂件做的hash
修改项⽬模块的版本依赖关系
go mod edit -replace=zinx@v0.0.0-20200306023939bc416543ae24=zinx@v0.0.0-20200221135252-8a8954e75100 go module github.com/aceld/modules_test
mod⽂件就会被修改
module github.com/aceld/modules_test
go 1.14
require github.com/aceld/zinx v0.0.0-20200306023939-bc416543ae24 // indirect
replace zinx v0.0.0-20200306023939-bc416543ae24 => zinx v0.0.0-20200221135252-8a8954e75100