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
posted @ 2021-10-07 10:51  野兽Gentleman  阅读(286)  评论(0编辑  收藏  举报