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.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 #下载依赖库
上一篇:Goalng打印金字塔和菱形
下一篇:Go语言数组