Go Module是从Go版本1.11.1开始官方提供的包管理工具,用于解决Go项目的包管理及依赖,类似于PHP的composer、Nodejs的npm。本章节会对Go Module的一些常用的实用的命令/设置进行介绍,更详细的介绍请查看官方文档:https://github.com/golang/go/wiki/Modules
Go Module
1.11.1
composer
npm
go.mod
go.mod是Go项目的依赖描述文件,该文件主要用来描述两个事情:
module
package
go.sum
我们将之前的hello world项目做一些改变,增加一个go.mod文件(也可以在项目根目录下使用 go mod init 项目名称命令初始化项目生成该文件),内容如下:
hello world
go mod init 项目名称
module my-hello
其中,my-hello为当前项目的名称,可以随意设置。
my-hello
就这样简单便完成了项目的module初始化。
一般情况下,go.sum依赖分析文件应当被添加到版本管理中随着go.mod文件一起提交。
使用go.mod意即用go.mod进行项目依赖管理。我们有两种go.mod的使用方式:IDE-vgo和命令行方式。以下我们通过下载使用GoFrame框架来演示如何使用这两种方式来管理依赖。
IDE-vgo
命令行
GoFrame
如果需要Goland IDE支持go.mod,必须要打开vgo的支持(包括代码依赖检测)。这两种使用方式的区别仅仅是下载依赖包的方式不同。
Goland
vgo
vgo是基于Go Module规范的包管理工具,同官方的go mod命令工具类似。
go mod
设置Goland启用vgo
如果您本地环境已经有VPN功能,那么可以忽略proxy的设置。
VPN
proxy
其中Proxy请输入代理地址下载依赖包,如果选择direct表示不使用代理。可选择的反向代理地址有:
Proxy
direct
https://goproxy.cn
https://goproxy.io
https://mirrors.aliyun.com/goproxy/
详见Go官网说明:https://github.com/golang/go/wiki/Modules#are-there-always-on-module-repositories-and-enterprise-proxies
这里请务必选择一个代理地址输入。
手动修改go.mod文件如下:
module my-hello require github.com/gogf/gf latest
增加GoFrame框架的依赖,其中latest表示使用最新版本,IDE将会立即去更新下载框架代码。成功后,IDE将会修改go.mod文件并生成go.sum依赖分析文件。
latest
随后go.mod文件被自动更新为:
module my-hello require github.com/gogf/gf v1.6.13
其中v1.6.13表示vgo检测到的最新框架版本。
v1.6.13
如果下载最新代码框架后出现下图情况:https://www.jetbrains.com/help/go/create-a-project-with-vgo-integration.html
请按快捷键 ⌥(option)+↩(return) 或者 鼠标右键, 选择 Sync packages of my-hello
⌥(option)+↩(return)
Sync packages of my-hello
随后等待几秒钟之后, 可以看到左侧的Go Module已经有内容,并且中终端自动输出了下载的框架版本
打开Terminal,在项目根目录下执行:
Terminal
export GO111MODULE=on GOPROXY=https://goproxy.cn; go get -u github.com/gogf/gf
该命令将会立即下载最新稳定版本的GoFrame框架。其中 export GO111MODULE=on; 表示开启Go Module特性(Go 1.11.x版本默认关闭,需要手动开启),export GOPROXY=https://goproxy.cn 表示使用代理下载,原因你懂的,并且也能极大提高依赖包下载速度。代理地址也可使用:
export GO111MODULE=on;
1.11.x
export GOPROXY=https://goproxy.cn
https://mirrors.aliyun.com/goproxy
随后go.mod文件内容被自动更新为:
module my-hello require github.com/gogf/gf v1.6.13 // indirect
且生成了新的go.sum依赖分析文件,该文件充其量算是一个临时文件,对于我们平时开发工作来说意义不大。
我们将之前的hello.go修改如下:
hello.go
package main import ( "fmt" "github.com/gogf/gf" ) func main() { fmt.Println("hello GF", gf.VERSION) }
运行结果如下:
可以看到,GoFrame框架已被自动下载成功,并在编译中被正常引入了。
恭喜,你已经学会了Go Module特性的基本使用啦!
现在最新版goland 2021.2 里没有vgo这个东东了,能否更新下这个页面,方便初学者入门,谢谢
Go → Go Modules → 开启 Enable Go modules integration → Environment: 里面填写 GOPROXY=https://goproxy.cn
难怪没看到vgo这块选项,目前用的go mod tidy解决,也很方便。
配置好goproxy,然后sync同步一下就可以了。也可以在命令行输入go mod tidy
go mod 编译超级慢
其实如果可以的话,开发时候用gopath,部署的时候用go mod 就好了
改点东西 等一分多钟,太折磨人了
Go编译是最快的
新版本的goland,运行go mod tidy,如果在项目中没有用到,则会自动删掉这个依赖
那别的项目不是要重新下载?
现在是更推荐v2吗?我看后面的文档和这里不是一个版本的
9 Comments
Rainshaw
现在最新版goland 2021.2 里没有vgo这个东东了,能否更新下这个页面,方便初学者入门,谢谢
Vulcan-z
Go → Go Modules → 开启 Enable Go modules integration → Environment: 里面填写 GOPROXY=https://goproxy.cn
趴哥 KingFly
难怪没看到vgo这块选项,目前用的go mod tidy解决,也很方便。
today
配置好goproxy,然后sync同步一下就可以了。也可以在命令行输入go mod tidy
angelandy
go mod 编译超级慢
其实如果可以的话,开发时候用gopath,部署的时候用go mod 就好了
改点东西 等一分多钟,太折磨人了
LikeWendy
Go编译是最快的
卢斌
新版本的goland,运行go mod tidy,如果在项目中没有用到,则会自动删掉这个依赖
angelandy
那别的项目不是要重新下载?
AutumnOrange
现在是更推荐v2吗?我看后面的文档和这里不是一个版本的