Go module
Go module
文章目录
- Go module
- 简介
- 使用
简介
Go的包管理方式是逐渐演进的,一开始所有的包都是放在GoPath下的
- GoPath不区分项目,任何import的路径都是葱花Gopath为根目录开始的
- 如果存在多个项目并且不同项目对于同一个依赖库的版本需求不一样时,
无法在同一个GOPATH下放置不同版本的依赖项
Go Module是语义化版本管理的依赖项的包管理工具,解决了GoPath存在的缺陷,是Go官方的版本管理工具
使用
首先,创建一个新的工程
package awesomeProject3
import "fmt"
func TestGoMod() {
fmt.Print("使用go mod")
}
随后,使用go mod init moduleName
初始化工程为go mod工程
go mod init github.com/Kevin091827/GoLearning/gomod
此时会得到一个go.mod
文件,一般的moduleName都是具体的某个仓库的地址
module github.com/Kevin091827/GoLearning/gomod
go 1.16
其次,将代码推送到github,push成功后就可以通过go get进行依赖包拉取
go get github.com/Kevin091827/GoLearning/gomod
随后,更新模块发布版本
package awesomeProject3
import "fmt"
func TestGoMod() {
fmt.Print("使用go mod")
fmt.Println("tag 1")
}
发布版本
git tag 1.0.0
git push origin master --tag
使用已经发布的版本,go mod默认会去找可用的依赖包的最高版本
重新执行go build即可更新依赖
如果需要使用特定版本,只需要在require后加上版本即可
require github.com/Kevin091827/GoLearning/gomod v1.0.1
随后,如果有的依赖包不在github或者某个托管网站上,而是在本地,此时需要通过replace重新指定依赖包地址,重新指定后,编译时就能找到依赖包
replace 3rd/module/testmod => /usr/local/go/testmod
最后,还有go mod vender,在默认情况下go build将忽略vendor目录,如果要从vendor目录开始构建:
go build -mod vendor
这样做的好处可以不用依赖网络上游的版本,在内部自由使用稳定可控制的版本进行构建,go mod vendor应该会成为非开源项目的主要构建方式。
还没有评论,来说两句吧...