参考网址
前言
我们在执行 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,你会看到相关目录文件:
进入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语言开发中的两个重要环境变量,它们分别定义了工作目录和安装目录。正确配置这两个变量可以确保项目编译、构建和运行的顺利进行,同时便于依赖管理和使用标准库。