Go - 小技巧
23 May 2023
Go 语言凭借其特性在近些年受到了广泛的关注,因此深入学习 Go 语言也显得尤为重要。这篇博客记录了我在深入学习 Go 语言时遇到的一些疑难杂症和对应的解决方案,以期在未来遇到同样问题时能够顺利解决。
GOROOT 和 GOPATH 的区别 §
查看 GOROOT 和 GOPATH §
查看 GOROOT
:
$ go env GOROOT
查看 GOPATH
:
$ go env GOPATH
查看所有 Go SDK 环境变量:
$ go env
区别 §
GOROOT
和 GOPATH
作为 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 的编译器和相关工具,例如 go
和 gofmt
等;src
目录用于存放 Go 标准库,例如 fmt
、os
和 sync
等。
与 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 是两个不同的概念,需要注意区分。