Go语言go modure的使用以及第三方包的依赖管理
Go modure介绍
go modules 是 golang 1.11 新加的特性,主要用来进行项目包的管理,在此之前其实也有其他工具,但是都有一定的不足,想了解的可以自行去查一下,本文主要介绍go mod的使用
(本文假设go相关的东西已经安装好,包括代理GOPROXY=https://goproxy.cn,direct)
环境
通过go env可以查看自己go相关的配置,其中GO111MODULE=“on”表示使用go mod模式,此模式下不会使用$GOPATH,如果GO111MODULE!=“on”,可以通过go env -w GO111MODULE=on进行设置。
使用
此时新建一个文件夹作为本次介绍的试验项目,随便放在哪都可,然后在目录下执行go mod init projectname : projectname就是我们这个模块名,这时我们的目录下就会有一个go.mod文件。
然后再到此目录下新建一个main.go文件,用来做第三包的管理测试,我所在的环境是CentOS,mac和其他linux环境应该相差无几。
然后在文件里加入如下代码:
package main
import (
"log"
"os"
"github.com/goinaction/code/chapter2/sample/search"
)
func init() {
log.SetOutput(os.Stdout)
}
func main() {
search.Run("prisident")
}
其中 “github.com/goinaction/code/chapter2/sample/search” 是Go语言实战中的项目路径,读者可以在这里改为其他第三方库均可。
在这里,很神奇的事情就发生了,此时mod组件就会自动把这个第三方包的代码下载到$GOPATH/pkg/mod/github.com路径下了,这就是使用go mod的方便之处,而且,go.mod文件内容会变为:
module firstgo
go 1.13
require github.com/goinaction/code v0.0.0-20171020164608-49fc99e6affb // indirect
这就很方便了,而且go mod 还提供很多命令方便我们进行第三方包的管理:
命令 | 说明 |
---|---|
download | download modules to local cache(下载依赖包) |
edit | edit go.mod from tools or scripts(编辑go.mod) |
graph | print module requirement graph (打印模块依赖图) |
verify | initialize new module in current directory(在当前目录初始化mod) |
tidy | add missing and remove unused modules(拉取缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content (验证依赖是否正确) |
why | xplain why packages or modules are needed(解释为什么需要依赖) |
具体的使用读者可以自行进行测试