gomodules
Modules 是 Go 管理依赖关系的工具,在 1.11 版本中加入,并在 1.13中对模块进行了重大改进和更改。相比前面的 dep,vendor,glide 等包管理方案,更易于上手。如果你现在开始一个 go 项目,最好了解一下。
Modules 的使用非常简单,我们不妨尝试一下:
开启(1.13版本及以后无需这一步)
1.13版本前请需手动开启模块(1.13 版本开始已经是默认模式)
export GO111MODULE=auto
初始化
进入项目目录,执行以下命令:
go mod init github.com/puresai/gomodules
output:
go: creating new go.mod: module github.com/puresai/gomodules
可以看到会生成go.mod,文件内容如下【go 1.19表示当前版本】
module github.com/puresai/gomodules
go 1.19
使用 go get
每次 go get 后,modules也会将你的安装的package加入go.mod
go get github.com/puresai/gohelper
module github.com/puresai/gomodules
go 1.19
require github.com/puresai/gohelper v0.0.1 // indirect
当然,如果你没有翻墙,也没有使用国内镜像,很多包可能都下载失败。可以参考https://goproxy.cn/设置。
本地文件夹相互调用
新建 pkg 目录,新建 str.go
package pkg
import "github.com/puresai/gohelper/str"
func MD(s string) string {
return str.Md5(s)
}
简单写一下 main.go
package main
import "github.com/puresai/gomodules/pkg" // 引入刚刚新建的 pkg
func main() {
print(pkg.MD("puresai"))
}
然后执行:
go run main.go
pkg/str.go:3:8: no required module provides package github.com/puresai/gohelper/str; to add it:
go get github.com/puresai/gohelper/str
这里可以执行根据提示执行
go get github.com/puresai/gohelper/str
或者可以使用
go mod tidy
这个命令可以拉取缺少的 package,移除不用的 package。
这个命令很有用,我习惯每次完成一个阶段代码都执行一次,可以去除很多冗余的 package。
其他命令
go mod download//下载依赖包到本地缓存
go mod graph //打印现有依赖结构
go mod verify //校验依赖
go mod why //解释为什么需要此模块
go mod vendor //下载依赖的package到本地vendor目录,学习中可使用
相关代码可参考:
https://github.com/puresai/blog-code/tree/master/gomodules
参考
gomodules
https://blog.puresai.com/2019/12/27/219/