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/
作者
puresai
许可协议