go module介绍
go module 是从1.11版本开始支持的官方包管理工具。不用go module的话,所有的项目必须在gopath下创建,版本依赖无法处理。通过使用go module可以摆脱GoPath开发,可以通过配置go.mod文件来自已定义依赖包的版本。
go module的三种模式
off
、on
、auto
模式 | 说明 |
---|---|
off | 关闭,使用在GoPath下开发的模式 |
on | 开启module,默认开启 |
auto | 项目在GoPath之外,根目录有go.mod文件 |
可以在系统环境变量中配置如下变量:GO111MODULE=auto
使用go module必须使用代理才能顺利的上网,环境变量中配置代理。需要配置如下的环境变量
GOPROXY=https://goproxy.cn,direct
go1.13之后GOPROXY的默认值是https://proxy.golang.org
,国内无法访问。
go mod 常用命令
命令 | 说明 |
---|---|
go mod init [modulename] | 创建go.mod文件,如果该项目是在GoPath下面的,不用自己指定包名。如果不是在GoPath下的项目,必须提供包名,否则无法创建。 |
go mod download | 根据go.mod文件下载依赖。 |
go mod tidy | 整理依赖项,代码中用不到的依赖会被删除,新的依赖会被下载。 |
go mod graph | 打印模块依赖 |
go mod vendor | 将依赖复制到vendor下 |
go mod why | 为什么需要依赖 |
go mod edit -fmt | 格式化go.mod文件 |
go mod edit -require=golang.xx.xx | 添加依赖项 |
go.mod文件
go.mod文件中包含该项目所有的依赖信息,和Java项目中的pom.xml文件类似。
以下为常用关键字和说明
关键字 | 关键字说明 |
---|---|
module | 包名说明 |
require | 项目的依赖包及版本 |
indirect | 间接引用 |
replace | 依赖替换 |
go module导入本地包
一、同一个项目下
一个项目有如下的目录结构,main.go需要引用subpackage中的sb.go中的函数。
1 | . |
go.mod文件不用任何配置,只需要在main.go中添加import "package1/subpackage"
便可以引用了。
二、不同项目下
有如下的目录结构
1 | . |
说明:
在mouledemo项目main.go中想要调用package1包中的函数。需要在module项目的go.mod中添加如下配置。
1 | require package1 v0.0.0 |
在main.go文件中导入,import "package1"
便可以调用package1中的内容了。
极端调用:在main.go中导入了"subprint.com/sbp"
项目,并取别名为sbp
,但是这个项目并不在goPath中,也不在网上,而是在本地的package2中。需要在go.mod中配置如下信息便可以调用。
1 | require subprint.com/sbp v0.0.0 |