介绍
Go1.11
版本支持module
功能,用于源代码更替和版本控制。可替代对GOPATH
的依赖,不必在$GOPATH/src
下新建项目,而是任意包含go.mod
的目录都可以是工程目录。
模块根 => 包含go.mod
文件的目录
go.mod
文件
功能是声明module
以及项目的依赖包。文件每行是由指令、动作、参数
组成。
module my/thing
// 注释符号
require (
golang.org/x/text v0.3.0
gopkg.in/yaml.v2 v2.1.0
)
require new/thing v2.3.4 // 项目需要的依赖包、版本
exclude old/thing v1.2.3 // 排除特别版本
replace bad/thing v1.4.5 => good/thing v1.4.5 // 取代依赖包
go mod
命令
go mod download // 下载依赖到本地缓存,查看GOCACHE缓存地址
go mod init [模块名] // 当前目录初始化和创建`go.mod`文件
go mod tidy -v // 添加确实模块和移除不必要的模块
go mod vendor -v // 当前目录下生产vendor目录,包含所有依赖包
go mod verify // 检查当前模块的依赖是否已经存储在本地下载的源代码缓存中
go build -mod=vendor // 依赖module下的vendor生成可执行文件
go.sum
文件
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= //虚拟版本号
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/jinzhu/configor v1.1.1 h1:gntDP+ffGhs7aJ0u8JvjCDts2OsxsI7bnz3q+jC+hSY=
临时环境变量GO111MODULE
GO111MODULE=off // 不用module功能,GOPATH模式寻找依赖包
GO111MODULE=on // module模式,build时找module下的vendor,GOPATH承担下载依赖包到GOPATH/pkg/mod
GO111MODULE=auto // 根据当前目录是否包含go.mod来判断
实践
# 当前GOPATH为/d/gohome,测试临时目录/d/test/monitor
cd /d/test/monitor
go mod init monitor // 初始化go.mod
go mod vendor // 生产vendor目录
go run main.go
# 目录结构
# ls /d/test/monitor
go.mod go.sum main.go route/ vendor/
-
main.go
文件
package main
import (
"fmt"
"monitor/route" // 导入模块内的包
"github.com/jinzhu/configor" //导入第三方库
)
func main() {
fmt.Println("hello", configor.Config{})
route.Run()
}
网友评论