Go - 小技巧

23 May 2023

go

Go 语言凭借其特性在近些年受到了广泛的关注,因此深入学习 Go 语言也显得尤为重要。这篇博客记录了我在深入学习 Go 语言时遇到的一些疑难杂症和对应的解决方案,以期在未来遇到同样问题时能够顺利解决。

GOROOT 和 GOPATH 的区别 §

查看 GOROOT 和 GOPATH §

查看 GOROOT

$ go env GOROOT

查看 GOPATH

$ go env GOPATH

查看所有 Go SDK 环境变量:

$ go env

区别 §

GOROOTGOPATH 作为 Go SDK 中两个重要的环境变量,其在意义和功能上的区别其实是很大的。

GOROOT 所指定的目录用于存放 Go 语言的源代码、标准库、工具和文档,其目录结构如下:

$ ls $(go env GOROOT)
api/  codereview.cfg   doc/  LICENSE  PATENTS  README.md    src/   VERSION
bin/  CONTRIBUTING.md  lib/  misc/    pkg/     SECURITY.md  test/

其中,bin 目录用于存放 Go SDK 的编译器和相关工具,例如 gogofmt 等;src 目录用于存放 Go 标准库,例如 fmtossync 等。

GOROOT 不同的是,GOPATH 所指定的目录(之前也称之为工作区目录)用于存放用户的 Go 语言代码、第三方库以及编译过的可执行文件,其目录结构如下:

$ ls $(go env GOPATH)
bin/  pkg/

其中,bin 目录用于存放 go install 命令所编译和安装的可执行文件,可以是用户的本地代码,也可以是第三方的相关工具;pkg 目录用于存放 go get 命令所下载的第三方库的源文件。

值得注意的是,在 Go 1.11 引入 Module 之前,GOPATH 通常还有一个名为 src 的目录,用于存储用户的 Go 项目源代码。每个项目通常在 src 目录中中都有一个相应的子目录。 但是在 Go 1.11 之后,GOPATH 的主要作用就变成存放第三方库源代码以及编译好的可执行文件了。 此外,GOPATH 的另一个名称 Workspace,同在 Go 1.18 中引入的 Workspace 是两个不同的概念,需要注意区分。

参考 §