快速入门Go Module

什么是Go Modules

标准的解释官网都有,其实可以理解为它就是一个官方新出的依赖管理工具。

Go Modules的使用

注意,使用go mod的前提是你的golang版本要>=1.11

首先,我们看下帮助文档,这里基本说明了Go Modules是干啥的,怎么用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
➜  ~ go help mod
Go mod provides access to operations on modules.

Note that support for modules is built into all the go commands,
not just 'go mod'. For example, day-to-day adding, removing, upgrading,
and downgrading of dependencies should be done using 'go get'.
See 'go help modules' for an overview of module functionality.

Usage:

go mod <command> [arguments]

The commands are:

download download modules to local cache
edit edit go.mod from tools or scripts
graph print module requirement graph
init initialize new module in current directory
tidy add missing and remove unused modules
vendor make vendored copy of dependencies
verify verify dependencies have expected content
why explain why packages or modules are needed

Use "go help mod <command>" for more information about a command.

接下来我们就来说说如何用go mod命令创建一个新项目

1.初始化

请先确保设置好环境变量: export GO111MODULE=on

go mod的价值就在于它让我们完全脱离了GOPATH这个概念,所以你可以在任何目录下创建项目
执行go mod init your_project_name,此时会在当前文件夹下创建一个go.mod文件,就表示初始化成功了。
比如:

1
2
3
4
5
6
7
8
➜  mkdir test
➜ cd test
➜ go mod init test
go: creating new go.mod: module test
➜ cat go.mod
module test

go 1.12

需要注意的是:

  1. go mod init 后面还有一个参数是你取的module的名字,可以是项目名或者任何合适的名字就行。不加这个参数你有可能会遇到错误。
  2. 可以看到初始化后的go.mod文件只有三行,一个module的申明,一个空行,一个go版本。空行的位置就是用来添加依赖的位置了。

2. 添加并下载依赖

2.1 添加依赖

我们打开go.mod文件,加入我们需要的依赖。

1
2
3
4
5
require (
github.com/elastic/go-elasticsearch/v6 6.x
github.com/go-redis/redis master
github.com/jinzhu/gorm v1.9.8
)

可以按照依赖的文档进行版本选择,比如es的这个库;
如果不限制版本,写master即可;
还可以查看对应库的release,把相应的版本号写上,如gorm。

2.2 下载依赖

接下来下载依赖即可

1
➜  go mod download

依赖的保存位置和go get下载的不同,go mod下载的依赖是放在$GOPATH/pkg/mod下面。
下载完成后,就可以进行项目开发了。

额外说明

如果是你有一个老项目想改用go mod来管理依赖怎么办呢?
有一个命令叫go tidy, 他可以把缺失的依赖添加到go.mod文件,并移除go.mod文件中多余的依赖。

我入门时候踩过的坑

  1. 项目放在GOPATH目录下,可能会导致go.mod的依赖不生效,import的地方都是小红线。
  2. go mod init 忘记加项目名,看help文档实在没看出来后面还需要加一个参数。
  3. 环境变量设置export GO111MODULE=on
  4. 别忘了最重要的,这一切都需要科学上网。
加载评论框需要科学上网