[go]goroot和gopath

236 阅读5分钟

参考网址

juejin.cn/post/715216…

前言

我们在执行 go env命令查看环境变量的时候,会发现有goroot和gopath这2个环境变量
那么它们到底是什么意思呢

GOROOT和GOPATH

首先需要知道它们之间的区别:
-   GOROOT 是 Go 安装的目录。安装完之后就可以不用再去修改
 在 win 系统中,默认是 `c:\GO`,也可以支持自定义
 在 Macos 中默认配置地址是`/usr/local/go`

-   GOPATH 是 GO 项目的工作空间和安装的第三方依赖包。
    就是我们创建 GO 项目放置的位置。
    因为 Go 的项目其实都是包。GOPATH 是支持设置多个的。

 在安装或下载第三方包时,经常会使用的命令是 `go get``go install`。
 使用 `go get` 命令下载的包会都下载在 `GOPATH` 设置的第一个地址的 src 目录下。
 使用 `go install` 下载时,在哪个`GOPATH`中找到了这个包,就会在哪个`GOPATH`下的bin目录生成可执行文件.

进入goroot,你会看到相关目录文件:

2022-10-08-23-38-00-image.png

进入gopath,你会看到三个文件目录

-   bin :golang编译可执行文件存放路径
-   pkg :golang编译包时,生成的.a文件存放路径
-   src: 源码路径

问题排查

大概了解其原理后,可以深入排查下安装了 kratos 后执行还是提示命令不存在的问题。

前提环境是在 window 操作系统下。同时需要知道使用安装命令:`go install github.com/go-kratos/kratos/cmd/kratos/v2@latest`。执行完后按道理会下载到 bin 文件中。

-   首先使用命令 ` go env  `查看当前的 GOPATH 地址。
-   进入 GOPATH 所显示的地址,然后进入其 bin 目录下看是否有 kratos.exe 文件,若存在则说明安装成功。
-   在查看系统和用户的环境变量中有没有配置了 GOPATH和GOROOT ,以及在Path 中是否配置了 GOPATH 目录下bin 文件地址,比如 `%GOPATH%\bin`。

一定要配置环境变量 path = %gopath%\bin。如果有多个 gopath 地址,则需要都配置到 path 地址上,如 `path=d:\goproject\bin;c:\go\bin`。

mac 系统中我同样出现了问题。于是我先检查gopath 地址是什么,然后再打开 `~/.bash_profile`文件发现path 地址配置错误了,所以安装第三方包成功了却无法使用。重新修改后执行 `source ~/.bash_profile`后就成功了。

之前一直失败的原因就是环境变量没有配置正确导致的。

GOPATH和GOROOT是Go语言开发中的两个关键环境变量,它们各自承担着不同的角色,对于项目的组织和构建过程至关重要。以下是对这两个环境变量的详细理解:

GOPATH

GOPATH是Go语言中使用的一个环境变量,它用于指定Go开发环境中的工作目录,即Go项目的工作区根目录。这个工作区一般包含三个文件夹:src、pkg、bin。

  • src:用于存放Go语言的源代码,包括自己编写的代码以及通过go get命令获取的第三方库代码。
  • pkg:用于存放编译后的库文件。这些库文件是Go语言在编译过程中生成的,可以被其他Go代码引用。
  • bin:用于存放编译后的可执行文件。这些文件是Go程序经过编译后生成的可执行程序,可以直接在操作系统上运行。

GOPATH的主要作用是定义Go语言项目的工作目录结构,使得开发人员可以方便地管理项目代码、依赖库以及编译后的可执行文件。在GOPATH下,可以创建多个项目,每个项目都有自己的源代码目录、编译后的库文件目录和可执行文件目录。

需要注意的是,GOPATH可以设置多个路径,这意味着可以配置多个工作区。但是,在引入第三方包时,go get命令会默认将包存放到GOPATH的第一个路径中的src目录下。因此,需要特别注意GOPATH变量值的顺序。

GOROOT

GOROOT也是Go语言中的一个环境变量,它用于指定Go语言的安装目录。这个目录包含了Go语言的各种标准库、编译器、调试器等工具链组件。

  • 标准库:Go语言提供了一套丰富的标准库,涵盖了网络编程、文件操作、并发控制等各个方面。这些标准库都存放在GOROOT目录下。
  • 编译器:Go语言的编译器用于将Go源代码编译成机器码或者中间表示形式。编译器也存放在GOROOT目录下。
  • 调试器:Go语言提供了强大的调试工具,可以帮助开发人员定位和解决程序中的问题。这些调试工具同样存放在GOROOT目录下。

GOROOT的主要作用是定义Go语言的安装目录,使得开发人员可以使用Go语言提供的标准库和工具链进行开发。在编写Go代码时,如果需要引用标准库中的包,编译器会默认在GOROOT目录下查找。

使用中的注意事项

  • 在进行Go语言开发时,通常需要同时设置GOPATH和GOROOT两个环境变量。GOPATH用于指定工作目录,而GOROOT用于指定安装目录。
  • 在使用Go工具链时(如go build、go install等),它们会默认从GOPATH和GOROOT中查找相关的文件和包。因此,正确配置这两个环境变量是确保项目编译、构建和运行顺利进行的关键。
  • 随着Go语言的发展,Go Modules逐渐成为了一种新的依赖管理方式。使用Go Modules可以更方便地管理项目依赖,并且不再需要严格依赖GOPATH。但是,在一些旧项目或者特定场景下,仍然需要使用GOPATH来管理项目结构和依赖。

综上所述,GOPATH和GOROOT是Go语言开发中的两个重要环境变量,它们分别定义了工作目录和安装目录。正确配置这两个变量可以确保项目编译、构建和运行的顺利进行,同时便于依赖管理和使用标准库。