Go mod 使用

2021年02月26日 254次浏览 Golang

Go 语言很年轻,它不像 Java 有 maven、node 有 npm... Go 语言早期没有统一好用的依赖管理工具,只有第三方提供的例如 dep、govendor。

但是从 Go 1.11 开始,Go 语言官方支持了新的依赖管理工具 go mod

因为是 Go 语言原生支持的,所以我们只需要在命令行执行:go mod 就能看到效果。

go mod download: 下载依赖的 module 到本地 cache
go mod edit: 编辑 go.mod
go mod graph: 打印模块依赖图
go mod init: 在当前目录下初始化 go.mod(就是会新建一个 go.mod 文件)
go mod tidy: 整理依赖关系,会添加丢失的 module,删除不需要的 module
go mod vender: 将依赖复制到 vendor 下
go mod verify: 校验依赖
go mod why: 解释为什么需要依赖

国内无法稳定地访问 Google 的服务,所以很多依赖无法成功下载,这个时候我们就要为go mod配置代理,目前国内优质的go mod代理推荐以下两个:

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

这里我推荐使用goproxy.cn,他是国内最早提供 goproxy 代理的服务,他的服务由七牛提供支持,七牛也是目前国内使用 Go 语言经验比较丰富的公司,我一直在使用goproxy.cn,很稳定。

下面我们执行一下命令来设置 goproxy:

go env -w GOPROXY=https://goproxy.cn,direct

注意:go env -w是不支持老版本 go 语言 sdk 的,如果你在执行该命令时报错,可以通过执行以下命令来设置GOPROXY:

export GOPROXY=https://goproxy.cn

配置完成后,我们执行go env命令可以看到效果

在一个新项目中,如果需要使用go mod,需要先进行初始化,进入你的项目根目录,执行如下命令进行初始化:

# github.com/mlogclub/GoBBS 为包名,根据自己的实际情况自定义
go mod init github.com/mlogclub/GoBBS

初始化完成之后会在你的项目根目录生成一个go.mod文件,内容如下:

module github.com/mlogclub/GoBBS

go 1.13

如果需要依赖第三方库,那么需要将第三方库声明到go.mod文件中,例如:

module github.com/mlogclub/GoBBS

go 1.13

require (
    gopkg.in/resty.v1 v1.12.0
)

配置完成之后执行go mod download将依赖下载到本地,依赖下载成功之后我们就可以在代码中通过import来引入相关依赖了。例如我们新建main.go文件,完整代码如下:

package main

import (
    "fmt"

    "gopkg.in/resty.v1"
)

func main() {
    resp, err := resty.R().Get("http://www.baidu.com")
    if (err == nil) {
        fmt.Println(string(resp.Body()))
    }
}

控制台执行go run main.go即可执行该代码。