0%

使用Go Modules

go modules是golang1.11新加的特性。将环境变量GO111MODULE设置为on来开启modules功能。

go mod命令

golang提供了go mod命令来管理包。

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 modules

创建一个新项目

创建一个新项目,并使用go mod init初始化:

1
2
3
$ mkdir hello
$ cd hello
$ go mod init

初始化之后会创建go.mod文件,go.mod提供了4个指令:modulerequirereplaceexclude

  • module: 指定包的名字
  • require: 指定依赖项模块
  • replace: 指定可以替换的依赖项模块
  • exclude: 指定可以忽略的依赖项模块

添加依赖

新建一个main.go文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"net/http"

"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World!")
})
r.Run(":8080")
}

直接执行go run main.go,会发现go mod会自动检查并加载依赖。

使用go get命令

除了直接执行程序自动加载依赖以外,还可以使用go get命令添加或升级依赖。

  • go get -u将会升级到最新的次要版本或者修订版本
  • go get package@version,将会获取指定version的package

执行go get命令会自动更新go.mod文件。

GOPROXY设置

当我们下载依赖包时,由于一些原因,导致下载失败,这时候我们可以通过设置GOPROXY来解决这个问题。

1
export GOPROXY=https://mirrors.aliyun.com/goproxy/

我们也可以通过goproxy来构建自己的私有服务。