返回介绍

12.1 GO PATH

发布于 2024-10-13 01:27:18 字数 8178 浏览 0 评论 0 收藏 0

跟据我个人的经验,那些对GOPATH感到困惑的同学,往往归属于下面两类:

  • 没有亲自安装过Go语言;
  • 安装过,但没理解安装细节;

其实,自己亲自动手安装一遍Go语言,然后运行一个Hello World程序,就基本上能理解GOPATH。 本节主要介绍GOPATH以及与其密切相关的GOROOT,关于安装相关的详细内容不再赘述。

GOROOT 是什么

通常我们说安装Go语言,实际上安装的是Go编译器和Go标准库,二者位于同一个安装包中。

假如你在Windows上使用Installer安装的话,它们将会被默认安装到c:\Go目录下,该目录即GOROOT目录,里面保存了开发GO程序所需要的所有组件,比如编译器、标准库和文档等等。

同时安装程序还会自动帮你设置GOROOT环境变量,如下图所示:

另外,安装程序还会把c:\Go\bin目录添加到系统的PATH环境变量中,如下图所示:

该目录主要是GO语言开发包中提供的二进程可执行程序。

所以,GOROOT实际上是指示GO语言安装目录的环境变量,属于GO语言顶级目录。

GOPATH 是什么

安装完Go语言,接下来就要写自己的Hello World项目了。实际上Go语言项目是由一个或多个package组成的,这些package按照来源分为以下几种:

  • 标准库
  • 第三方库
  • 项目私有库

其中标准库的package全部位于GOROOT环境变量指示的目录中,而第三方库和项目私有库都位于GOPATH环境变量所指示的目录中。

实际上,安装GO语言时,安装程序会设置一个默认的GOPATH环境变量,如下所示:

与GOROOT不同的是,GOPATH环境变量位于用户域,因为每个用户都可以创建自己的工作空间而互不干扰。 用户的项目需要位于GOPATH下的src/目录中。

所以GOPATH指示用户工作空间目录的环境变量,它属于用户域范畴的。

依赖查找

当某个package需要引用其他包时,编译器就会依次从GOROOT/src/GOPATH/src/中去查找,如果某个包从GOROOT下找到的话,就不再到GOPATH目录下查找,所以如果项目中开发的包名与标准库相同的话,将会被自动忽略。

GOPATH的缺点

GOPATH的优点是足够简单,但它不能很好的满足实际项目的工程需求。

比如,你有两个项目A和B,他们都引用某个第三方库T,但这两个项目使用了不同的T版本,即:

  • 项目A 使用T v1.0
  • 项目B 使用T v2.0

由于编译器依赖查找固定从GOPATH/src下查找GOPATH/src/T,所以,无法在同一个GOPATH目录下保存第三方库T的两个版本。所以项目A、B无法共享同一个GOPATH,需要各自维护一个,这给广大软件工程师带来了极大的困扰。

针对GOPATH的缺点,GO语言社区提供了Vendor机制,从此依赖管理进入第二个阶段:将项目的依赖包私有化。

赠人玫瑰手留余香,如果觉得不错请给个赞~

本篇文章已归档到GitHub项目,求星~ 点我即达

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文