首先升级go语言版本至1.13以上,配置好相关常量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
linux系统下进入目标项目目录,执行
go mod init
能够自动生成一个空的go.mod文件,说他是空的是因为此时该文件中不会标记任何包依赖
然后执行
go mod tidy
此指令会自动检索项目中使用的依赖,自动下载能够下载的那些依赖包,并记录在go.mod以及go.sum中
指令执行完毕可以查看go.mod,会发现已经自动帮我们加上了require(当然啦前提是你的项目有依赖包的话)
如果项目中有部份依赖是本地别的项目,则执行该指令时会报错,会给我们指出是哪些依赖找不到
推荐趁此机会理一理项目中使用的依赖,将不必要的(如官方就有的)或是引入了两个相同功能的(不同文件相同功能引用不同的包)依赖进行清理
之后按照指令列出的找不到的依赖,一个一个确认他们在本地的相对路径,并写入go.mod中,格式如下
replace navi/kstgo => ../kstgo
replace 在项目中import的路径 => 本地项目的相对路径
以此法将所有依赖的本地项目全部引入,可执行多次 go mod tidy 来检查是否已经能够找到所有的包,如果没报错则可尝试进行 go build
在引入本地项目的过程中,需要被依赖的本地项目也有go.mod文件,即也需要mod化
个人感觉其实go.mod就相当于package.json,go.sum就相当于package-lock.json,go mod download就相当于npm install
附部分相关指令
指令 | 效果 |
---|---|
go mod init | 在项目中生成go.mod文件 |
go mod tidy | 检索项目中使用的依赖并加入到go.mod文件中 |
go get -u | 更新现有的依赖 |
go mod download | 下载go.mod文件中指明的所有依赖 |
go mod edit | 修改go.mod文件,直接vim应该也一样 |
go mod vendor | 导出现有的所有依赖 |
go mod graph | 查看现有的依赖结构【看不懂,感觉就是打印了go.sum |
go mod verify | 校验一个模块是否被篡改过 |
附一个完整的go.mod文件内容范例
module navi/kvp-mps
go 1.13
require (
baliance.com/gooxml v1.0.1
github.com/astaxie/beego v1.12.0
github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/go-redis/redis v6.15.6+incompatible
github.com/go-sql-driver/mysql v1.4.1
github.com/golang/protobuf v1.3.2
github.com/jinzhu/gorm v1.9.11
github.com/lib/pq v1.2.0 // indirect
github.com/onsi/ginkgo v1.10.2 // indirect
github.com/onsi/gomega v1.7.0 // indirect
golang.org/x/text v0.3.2
navi/kstgo v0.0.0-00010101000000-000000000000
navi/kvp-soap v0.0.0-00010101000000-000000000000
navi/kvp-tiny v0.0.0-00010101000000-000000000000
navi/navi-go-log v0.0.0-00010101000000-000000000000
)
replace (
navi/kstgo => ../kstgo
navi/kvp-soap => ../kvp-soap
navi/kvp-tiny => ../kvp-tiny
navi/navi-go-log => ../navi-go-log
)