Skip to main content
Version: 2.7.x

Go Module 是从Go版本 1.11.1 开始官方提供的包管理工具,用于解决Go项目的包管理及依赖,类似于PHP的 composer、Nodejs的 npm。本章节会对 Go Module 的一些常用的实用的命令/设置进行介绍,更详细的介绍请查看官方文档: https://github.com/golang/go/wiki/Modules

关于 go.mod

go.mod 是Go项目的依赖描述文件,该文件主要用来描述两个事情:

  1. 当前项目名( module)是什么。每个项目都应该设置一个名称,当前项目中的包( package)可以使用该名称进行相互调用。
  2. 当前项目依赖的第三方包名称。项目运行时会自动分析项目中的代码依赖,生成 go.sum 依赖分析结果,随后go编译器会去下载这些第三方包,然后再编译运行。

我们将之前的 hello world 项目做一些改变,增加一个 go.mod 文件(也可以在项目根目录下使用 go mod init 项目名称 命令初始化项目生成该文件),内容如下:

module my-hello

其中, my-hello 为当前项目的名称,可以随意设置。

就这样简单便完成了项目的 module 初始化。

一般情况下, go.sum 依赖分析文件应当被添加到版本管理中随着 go.mod 文件一起提交。

使用 go.mod

使用 go.mod 意即用 go.mod 进行项目依赖管理。我们有两种 go.mod使用方式IDE-vgo命令行 方式。以下我们通过下载使用 GoFrame 框架来演示如何使用这两种方式来管理依赖。

如果需要 Goland IDE支持 go.mod,必须要打开 vgo 的支持(包括代码依赖检测)。这两种使用方式的区别仅仅是下载依赖包的方式不同。

使用Goland IDE vgo(推荐)

vgo 是基于 Go Module 规范的包管理工具,同官方的 go mod 命令工具类似。

  1. 设置 Goland 启用 vgo

如果您本地环境已经有 VPN 功能,那么可以忽略 proxy 的设置。

其中 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

这里请务必选择一个代理地址输入。

  1. 手动修改 go.mod 文件如下:
module my-hello


require github.com/gogf/gf latest

增加 GoFrame 框架的依赖,其中 latest 表示使用最新版本,IDE将会立即去更新下载框架代码。成功后,IDE将会修改 go.mod 文件并生成 go.sum 依赖分析文件。

  1. 随后 go.mod 文件被自动更新为:
module my-hello


require github.com/gogf/gf v1.6.13

其中 v1.6.13 表示vgo检测到的最新框架版本。

  1. 如果下载最新代码框架后出现下图情况: https://www.jetbrains.com/help/go/create-a-project-with-vgo-integration.html

  1. 请按快捷键 ⌥(option)+↩(return) 或者 鼠标右键, 选择 Sync packages of my-hello

  1. 随后等待几秒钟之后, 可以看到左侧的 Go Module 已经有内容,并且中终端自动输出了下载的框架版本

使用命令行

  1. 打开 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 表示使用代理下载,原因你懂的,并且也能极大提高依赖包下载速度。代理地址也可使用:

  • https://goproxy.cn
  • https://goproxy.io
  • https://mirrors.aliyun.com/goproxy

  1. 随后 go.mod 文件内容被自动更新为:
module my-hello


require github.com/gogf/gf v1.6.13 // indirect

且生成了新的 go.sum 依赖分析文件,该文件充其量算是一个临时文件,对于我们平时开发工作来说意义不大。