GOROOT指的Golang语言的安装路径,即Golang语言内置程序库所在的位置。通常在安装时环境变量会设置好GOROOT路径。当开发时,import标准库时并不需要额外安装,当程序运行后,也会去GOROOT路径下寻找相应程序。
GOPATH即存放第三方库的位置。通常开发时,会把GOPATH重新设置。
用于以包(package)的形式组织并存放 Go 源文件,这里的包与 src 下的每个子目录是一一对应。例如,若一个源文件被声明属于 log 包,那么它就应当保存在 src/log 目录中。
并不是说 src 目录下不能存放 Go 源文件,一般在测试或演示的时候也可以把 Go 源文件直接放在 src 目录下,但是这么做的话就只能声明该源文件属于 main 包了。正常开发中还是建议大家把 Go 源文件放入特定的目录中。
另外需要注意的是,Go语言会把通过go get
命令获取到的库源文件下载到 src 目录下对应的文件夹当中。
用于存放通过go install
命令安装某个包后的归档文件。归档文件是指那些名称以“.a”结尾的文件。
该目录与 GOROOT 目录(也就是Go语言的安装目录)下的 pkg 目录功能类似,区别在于这里的 pkg 目录专门用来存放项目代码的归档文件。
编译和安装项目代码的过程一般会以代码包为单位进行,比如 log 包被编译安装后,将生成一个名为 log.a 的归档文件,并存放在当前项目的 pkg 目录下。
与 pkg 目录类似,在通过go install
命令完成安装后,保存由 Go 命令源文件生成的可执行文件。在类 Unix 操作系统下,这个可执行文件的名称与命令源文件的文件名相同。而在 Windows 操作系统下,这个可执行文件的名称则是命令源文件的文件名加 .exe 后缀。
在环境变量中添加GOPATH变量,将目录添加即可。
设置当前目录为GOPATH:选择一个目录,在目录的命令行下执行
export GOPATH='pwd'
Golang从1.13版本开始有Go Modules.
官方github关于Modules的WIKI:https://github.com/golang/go/wiki/Modules
使用 Go Modules 管理依赖后会在项目根目录下生成两个文件 go.mod 和 go.sum
go.mod会记录当前项目的所有依赖项
module test
go 1.15
require github.com/gin-gonic/gin v1.6.3
go.sum会记录每个依赖库的版本和哈希值
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
要使用Go Modules首先要设置Go111Modules = on, GO111MODULE有三个值
on:开启
off:关闭
auto根据当前目录下是否有go.mod文件来判断是否使用modules功能
注意:**无论使用那种模式,module功能默认不在GOPATH目录下查找依赖文件,所以使用modules功能时请设置好代理
设置GO111MODULE
# windows
set GO111MODULE=on
# linux
export GO111MODULE=on
然后使用go env
查看
进入项目文件夹test
# 初始化路径
go mod init test
# 检测依赖
go mod tidy
# 如果有些依赖项未下载则需要下载
go mod download
# 导入依赖
go mod vendor
# 检测依赖
go mod tidy
# 如果有些依赖项未下载则需要下载
go mod download
# 导入依赖
go mod vendor
在git中需要把vendor文件夹放入白名单中,不然项目体积会很大。
git设置白名单方式为在git托管的项目根目录新建 .gitignore 文件,设置忽略即可,但是 go.mod 和 go.sum 不要忽略。
另一人clone项目后在本地进行依赖更新(同上方依赖更新)即可
go mod init # 初始化go.mod
go mod tidy # 更新依赖文件
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的vendor文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
go mod why # 解释为什么需要依赖
GOPROXY 是Go语言官方提供的一种通过中间代理商来为用户提供包下载服务的方式。要使用 GOPROXY 只需要设置环境变量 GOPROXY 即可。
// 阿里云镜像
GOPROXY=https://mirrors.aliyun.com/goproxy/
// 中国golang镜像
GOPROXY=https://goproxy.io
// 七牛云为中国的gopher提供了一个免费合法的代理goproxy.cn,其已经开源。只需一条简单命令就可以使用该代理:
go env -w GOPROXY=https://goproxy.cn,direct
执行go get
命令,在下载依赖包的同时还可以指定依赖包的版本。
go get -u
命令会将项目中的包升级到最新的次要版本或者修订版本;go get -u=patch
命令会将项目中的包升级到最新的修订版本;go get [包名]@[版本号]
命令会下载对应包的指定版本或者将对应包升级到指定的版本。提示:go get [包名]@[版本号]
命令中版本号可以是 x.y.z 的形式,例如 go get [email protected],也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。
godep 是一个Go语言官方提供的通过 vender 模式来管理第三方依赖的工具,类似的还有由社区维护的准官方包管理工具 dep。
Go语言从 1.5 版本开始开始引入 vendor 模式,如果项目目录下有 vendor 目录,那么Go语言编译器会优先使用 vendor 内的包进行编译、测试等。
go get github.com/tools/godep
命令执行成功后会将 godep 工具的源码下载到 GOPATH 的 src 目录下对应的文件夹中,同时还会在 GOPATH 的 bin 目录下生成一个名为 godep.exe 的可执行文件。
命令 | 说明 |
---|---|
godep save | 将依赖包的信息保存到Godeps.json文件中 |
godep go | 使用保存的依赖项运行go工具 |
godep get | 下载并安装指定的包 |
godep path | 打印依赖的GOPATH路径 |
godep restore | 在GOPATH中拉取依赖的版本 |
godep update | 更新选定的包或go版本 |
godep diff | 显示当前和以前保存的依赖项集之间的差异 |
godep version | 查看版本信息 |
执行godep save
命令,会在当前目录中创建 Godeps 和 vender 两个文件夹。Godeps 文件夹下会生成一个 Godeps.json 文件,用来记录项目中所依赖的包信息;vender 目录则是用来保存当前项目所依赖的所有第三方包。生成的 Godeps.json 文件的结构如下所示:
{
"ImportPath": "main",//项目路径信息
"GoVersion": "go1.13",//go语言版本号
"GodepVersion": "v80",//godep版本号
"Deps": [//当前引用的包
{
"ImportPath": "github.com/go-gomail/gomail",//依赖包路径
"Comment": "2.0.0-23-g81ebce5",//版本号
"Rev": "81ebce5c23dfd25c6c67194b37d3dd3f338c98b1"//哈希值
}
]
}
当所引用的第三方包要升级只需要修改Godep.json里面的依赖包的版本号,让后执行godep save命令即可。
godep查找依赖顺序: