概述
在写代码过程中,总要引用其他的库而产生功能模块的依赖。Go 在 版本1.1 开始提供 Module 模块化的支持。在1.4 版本后 鼓励所有用户从其他依赖性管理系统迁移到模块
模块
概念
“模块”是多个Go包 (package)的集合,将这些包作为一个整体一起进行版本控制。
“模块”记录了正确的依赖关系和依赖需要,在构建时会很便利。
总结 项目工程仓库、模块和包之间的关系:
- 项目工程仓库 可以包含一个或多个Go模块。
- 每个模块 可以包含一个或多个Go包。
- 每个 包 由单个目录中的一个或多个Go源文件组成。
模块必须有个版本号,格式为:
v(major).(minor).(patch),
比如 v0.1.0, v1.2.3, or v1.5.0-rc.1.
go.mod 文件位于项目的根目录,项目也不必要放在GOPATH目录下。
初始化一个模块
在项目中开启 模块 的支持,需要手动开启。
指令格式:
go mod init 模块名
比如:
go mod init mymod
在命令行窗口执行后,将会在当前目录下生产一个 go.mod 文件,内容如下:
module mymod
go 1.14
模块的应用更新
在goland 中,配置了上述的模块后。如果在代码里 import 了某个第三方模块,将会自动更新 go.mod 文件,比如我们在代码里添加
package main
import (
"fmt"
"rsc.io/quote" // 假如这里新添加
)
func main(){
fmt.Print("xxxxx")
fmt.Println(quote.Hello()) // 假如这里新添加
}
那么,你在run 或者同步工程时会发现,go.mod 发生了变化,如下:
module mymod
go 1.14
require rsc.io/quote v1.5.2
注意更新模块失败的问题:
由于网络的差别,需要添加代理。对于 Goland IDE 来说,我们打开 Preferences,在 Go > 选择 Go Modules(vgo) 在 proxy里写入 https://goproxy.cn 代理的地址,并勾选 Enable Go Modules。
要了解更多,请阅读 https://github.com/golang/go/wiki/Modules
END