$GOPATH 背后的编程范式是什么,它有什么作用?
What is the programming paradigm behind the $GOPATH, what does it do?
作为刚接触 Golang 的人,我对 $GOPATH
的概念有些困惑。
根据我的经验,它唯一让我想起的是 Microsoft [=] 上的“系统文件夹路径”(C:\Windows
、C:\Program Files
) 28=] 机器——它在某种程度上与此概念相关吗?
好像有描述from the go team,但是太实用了,讲的是是什么,而不是为什么 是。
那么,这是为什么呢?
GOPATH
是一个变量,指示应用程序依赖项的安装位置。它基本上是存储应用程序可能使用的包的目录的路径。
任何大小合理的应用程序都具有依赖性。在 golang 中,这些以包的形式出现。在编译时,需要知道依赖项(即您使用的包)的位置,以便可以构建您的可执行文件。
它们可以存储在一个固定的、预定义的位置,或者以某种方式让用户能够自己指定位置。第一种方法有很多缺点(例如,不可能支持具有不同目录结构的操作系统)。因此,go tool 的设计者决定通过这个变量让它成为用户可配置的。这也为用户提供了更大的灵活性,例如能够将不同项目的依赖项分组到不同的目录中。
环境变量(如GOPATH
)的使用不限于golang。 Java 有它的 CLASSPATH
,Python 有它的 PYTHONPATH
等等(它们各有特点,但基本作用相同)。
这是一个 "include path"。实际上,每种(现代)语言都使用一种语言。
对于 C/C++,它是 LIB
和 INC
环境变量的组合(至少在 Unix/Makefile 环境中)。
对于 Perl (5),它是 PERLLIB
或 PERL5LIB
环境变量。
对于 Python,它是 PYTHONHOME
环境变量。
对于 Node.js 它是 NODE_PATH
变量。
等等等等
作为刚接触 Golang 的人,我对 $GOPATH
的概念有些困惑。
根据我的经验,它唯一让我想起的是 Microsoft [=] 上的“系统文件夹路径”(C:\Windows
、C:\Program Files
) 28=] 机器——它在某种程度上与此概念相关吗?
好像有描述from the go team,但是太实用了,讲的是是什么,而不是为什么 是。
那么,这是为什么呢?
GOPATH
是一个变量,指示应用程序依赖项的安装位置。它基本上是存储应用程序可能使用的包的目录的路径。
任何大小合理的应用程序都具有依赖性。在 golang 中,这些以包的形式出现。在编译时,需要知道依赖项(即您使用的包)的位置,以便可以构建您的可执行文件。
它们可以存储在一个固定的、预定义的位置,或者以某种方式让用户能够自己指定位置。第一种方法有很多缺点(例如,不可能支持具有不同目录结构的操作系统)。因此,go tool 的设计者决定通过这个变量让它成为用户可配置的。这也为用户提供了更大的灵活性,例如能够将不同项目的依赖项分组到不同的目录中。
环境变量(如GOPATH
)的使用不限于golang。 Java 有它的 CLASSPATH
,Python 有它的 PYTHONPATH
等等(它们各有特点,但基本作用相同)。
这是一个 "include path"。实际上,每种(现代)语言都使用一种语言。
对于 C/C++,它是 LIB
和 INC
环境变量的组合(至少在 Unix/Makefile 环境中)。
对于 Perl (5),它是 PERLLIB
或 PERL5LIB
环境变量。
对于 Python,它是 PYTHONHOME
环境变量。
对于 Node.js 它是 NODE_PATH
变量。
等等等等