> For the complete documentation index, see [llms.txt](https://denglj.gitbook.io/essential-go/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://denglj.gitbook.io/essential-go/01-getting-started/gopath-goroot-gobin.md).

# GOPATH, GOROOT, GOBIN

## GOPATH

如果您来自其他编程语言，您可能以前是可以把源代码放在文件系统中的任意位置。

而Go tools会预期您的源代码结构是遵循一定的布局。

`GOPATH`是您工作空间的根目录，它包含如下几个文件夹：

* `src` — 放源代码的位置：`.go`, `.c`, `.g`, `.s`
* `pkg` — 放已编译的包的位置：`.a` 文件
* `bin` — 放Go构建的可执行文件

跟`PATH`环境变量类似，`GOPATH`也的值也是一系列的用冒号`:`分割的目录路径（Windows上是用分号`;`分割的）。

Go会在`GOPATH`目录去查找需要的包（packages）或库（libraries）。

`go get`工具下载包会被放到`GOPATH`中的第一个目录中。

自从Go v1.8起，如果您没主动设置`GOPATH`环境变量，它的默认值在Linux/Unix上为`$HOME/go`，在Windows上为`%USERPROFILE%/go`。

有些工具会假定`GOPATH`只是单个目录。

## GOBIN

它是`go install`和`go get`会放构建`main`包之后生成的二进制文件的地方。一般的，会把`GOBIN`添加到环境变量`PATH`中，这样方直接执行。

## GOROOT

这是您安装Go编译器的地方。它也是查找标准库的地方。

由于Go将构建路径嵌入在工具链中，因此很少需要设置此变量。如果安装目录跟构建目录不同（或构建时指定的目录），则需要设置`GOROOT`。

执行[`go env`](/essential-go/common-standard-libraries/56-the-go-command/go-env.md)命令查看Go环境变量的完整列表。
