首页 > 技术分享 > Golang
收藏

Go语言依赖管理:GOPATH和Go Module

03/26 11:02
大潇博客 原创文章,转载请标明出处

Golang常用的两个环境变量

  • GOROOT : Golang程序所在的目录
  • GOPATH : Golang项目所在路径

在设置GOPATH后,引入项目中的自定义包时,总提示包没有在某个目录中。这个目录,大概就是Go程序所在目录的src目录中,也就是GOROOT下面的src目录中,比如:

明明已经配置了GOPATH,并且在终端输入“echo $GOPATH”也能正常输出,但在项目中却无法使用

这个问题大概率是因为新版本的Go启用了Go Module引起的)


Go Module是什么

Go Module是Go语言官方提供的依赖管理工具,在Go 1.11版本引入,Go 1.13版本正式推荐使用,用于解决传统GOPATH模式下的依赖版本冲突问题。GO111MODULE‌是控制Go Module模块功能是否启用的环境变量,其值可设置为on、off或auto

GO111MODULE 有三个值,分别为:

auto(默认值):如果当前目录包含go.mod文件,则启用模块支持;如果没有,则使用GOPATH模式。

on:总是启用模块支持,即使当前目录没有go.mod文件。

off:禁用模块支持,使用GOPATH模式。


查看GO111MODULE的值

go env GO111MODULE


将Go设置为GOPATH模式(此后即可正常使用GOPATH)

go env -w GO111MODULE=off


将Go设置为Go Module模式

go env -w GO111MODULE=on


使用 Go Modules 将生成 go.mod 和 go.sum 文件

使用Go Modules模式后,Go Modules可以将某个项目下的所有依赖整理成一个go.mod文件,里面写入了依赖的版本等,且使用Go Modules之后可不用将代码放置在src下

使用Go Modules管理依赖后会在项目根目录下生成两个文件:

  • go.mod:包管理工具,记录当前项目的所有依赖
  • go.sum:记录每个依赖库的版本和哈希值

包管理工具go.mod具有以下特性:

  • 1)自动下载依赖包,即第三方包
  • 2)自定义包无须放在GOPATH设置的路径
  • 3)第三方包或自定义包写在go.mod文件中,通过go.mod文件管理包
  • 4)已经转移的第三方包或自定义包,在go.mod文件中使用replace替换,不需要修改代码
  • 5)对第三方包指定版本


在项目中初始化模块的命令

在当前目录生成 go.mod 文件来启用模块化管理依赖

go mod init <module-name>

其中,module-name 是项目名称

比如,当前项目路径是 GOPATH/src/project,其内部有两个包(同级),分别是main和db,为了能在main中引入db,需要进入project目录,使用以下命令,初始化当前模块

go mod init project

完成后将看到成功创建 go.mod 文件的提示:

初始化后,即可看到在project目录下生成go.mod文件,仅初始化的文件,只声明了模块名和Go版本,如果再添加其它第三方包,则会声明包的名称以及版本号等等

这时即可在main包中使用db包了

package main

import (

"fmt"

"project/db"

)

func main(){

fmt.Println('Holle World')

db.Test()

}


管理依赖仓库

当 GO111MODULE 开启时,Go 语言会优先从 go.mod 文件中的模块信息中获取依赖库的版本信息,如果没有找到,则会去 GOPATH 和 vendor 目录下查找依赖库。

使用 go get 命令或者直接修改 go.mod 文件来管理依赖库的版本信息。例如:

go get -u "github.com/go-sql-driver/mysql"  #使用 go get 命令安装依赖库(会自动更新 go.mod 文件)

此时,go.mod文件的内容是:

还可以直接修改go.mod文件,添加依赖信息:

# 直接修改 go.mod 文件

require (

github.com/gin-gonic/gin v1.6.3

)


更新依赖库

可以使用以下命令来更新依赖库:

go mod tidy  #移除不需要的依赖库

go mod vendor  #将依赖库复制到 vendor 目录下

go mod download #下载依赖库


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311