GOPATH

GOPATH是Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。

工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。

GOPATH适合处理大量Go语言源码、多个包组合而成的复杂工程。

1. 使用命令行查看GOPATH信息

1
go env

运行结果(下面结果中,真实的用户名用{Username}代替):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/{Username}/Library/Caches/go-build"
GOENV="/Users/{Username}/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/{Username}/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/{Username}/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.18.3"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/j4/7ng4g2t11hsgtg98308br_6m0000gn/T/go-build3214703220=/tmp/go-build -gno-record-gcc-switches -fno-common"
  • GOARCH:目标处理器架构
  • GOBIN:编译器和链接器的安装位置
  • GOOS:目标操作系统
  • GOPATH:当前工作目录
  • GOROOT:Go开发包的安装目录

在 Go 1.8 版本之前,GOPATH 环境变量默认是空的。从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表:

平台 默认值 举例
Windows 平台 %USERPROFILE%/go C:\Users\用户名\go
Unix 平台 $HOME/go /home/用户名/go

2. 使用GOPATH的工程结构

在 GOPATH 指定的工作目录下,代码总是会保存在$GOPATH/src目录下。在工程经过go buildgo installgo get等指令后,会将产生的二进制可执行文件放在$GOPATH/bin目录下,生成的中间缓存文件会被保存在$GOPATH/pkg下。

如果需要将整个源码添加到版本管理工具(Version Control System,VCS)中时,只需要添加 $GOPATH/src目录的源码即可。bin和pkg目录的内容都可以由src目录生成。

3. Go环境变量的查看与设置

查看go的环境变量:

1
go env

设置go的环境变量:

1
2
3
4
go env -w {Environment_variable}={Value}

# 例如:
go env -w GO111MODULE=on

参考资料

[1] 参考链接:http://c.biancheng.net/view/88.html