工作区和GOPATH

Go 工作环境简要介绍

Posted by zhouqian on Wednesday, May 25, 2022

环境介绍

通过 docker image 创建的 container。

  • 通过命令 docker run -it golang 启动容器。
  • 容器使用 Go 版本:v1.18.2 linux/amd64

GOROOT

GO 语言的安装路径。

GOPATH

Go 的工作目录,值为一个或多个目录路径,每个目录都代表 Go 语言的一个工作区。

GOPATH 变量在 Unix 系统上默认为 $HOME/go,Windows 系统上默认为 %USERPROFILE%\go。

当前版本中,通过 go get 命令拉取的第三方依赖会默认安装在 GOPATH 下第一个工作目录中的 pkg/mod 下。

GOPATH 下一般会包含 bin、pkg、src 三个子目录:

bin

GOBIN 为空时, go install 生成的可执行文件会默认存放在 GOPATH 下第一个工作区的 bin 子目录。

pkg

pkg 下主要有包含两个子目录:

1. mod

go get 下载的模块会保存在 GOMODCACHE 中,GOMODCACHE 的默认值是 GOPATH 下第一个工作区的 pkg/mod。

2. sumdb

go get 下载的校验和数据库状态会缓存在 GOPATH 下第一个工作区的 pkg/sumdb。

src

由于 GOMODULE 功能的出现,新版本的 GO 默认会将项目源码交由 GOMODULE 管理,一般不会再放置到 src 中。

而在GOMODULE 出现之前,go 项目源码必须要放置到 GOPATH/src 下,而 GOMODULE 模式中,项目源码可以放置在任意位置,不再受 GOPATH 限制。

如果 GOPATH 设置了多个工作区,GO 在查找依赖的时候,会先查找 GOROOT,但后按照 GOPATH 中设置的工作区顺序从左到右查找,直至找到依赖后停止。

如果多个工作区中存在导入路径相同的代码包,则程序会在顺序找到第一个代码包后停止查找

GOBIN

存放 go install 后安装的可执行文件,一般设置为 GOPATH 设置的第一个工作区的 bin 子目录。

如果为空,则 go install 后生成的可执行文件会保存在GOPATH 设置的第一个工作区的 bin 子目录中。

如果通过 go install 安装第三方依赖后未在 GOPATH 的第一个工作的 bin 子目录中找到可执行文件,则需要显式设置 GOBIN。

参考