GOROOT、GOPATH、GOBIN 解析

3,032 阅读3分钟

下面是我个人的~/.zshrc配置

export GO111MODULE=on
export GOPROXY="https://goproxy.io"
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

GOROOT

顾名思义go语言的根目录,go下载或者解压安装后的目录,这个可以是任意的目录,但是最后安装在一个自己方便记忆的地方,方便我们配置和后期升级或者不用得时候删除,我的goroot的目录就安装在/usr/local下,go是tar包解压后的目录

GOPATH

可以理解为go的默认的workspace,这个1.13以后的版本,linux环境下默认的是~/go,但是不会给你新建go文件夹,你可以自己新建,而且要在这个目录下开发或者编程的时候必须在这个目录下新建一个src目录,因为go早期的版本只支持gopath目录开发,并且默认的开发目录就是gopath下的src目录,然后在src目录下新建开发项目的目录如:gitlab.com/xxx/ooo。在ooo目录下开发,如果在gopath下开发,项目中引入的第三方依赖一定要放在src目录下,因为默认起始的检索目录就是在GOPATH/src目录下,要不然一直会提示在GOPATH和GOROOT目录下无法找到这个依赖包

检索目录的顺序

vendor GOPATH/src GOROOT GOPATH/pkg/mod

1. 如果项目下有vendor目录会首先去vendor目录去查找,
    好处:是把每个项目的依赖都相当于提供了一个仓库
    坏处:有些项目的依赖是同一个包同一个版本,但是我们还是要下载,占用本地更多的资源
2. 然后去GOPATH/src去找,这个是在GOPATH为项目路径的时候会在这个地方检索
    好处:相当于给所有在gopath目录下的项目设置了一个本地的仓库,可以共用
    坏处:把开发的目录限制到gopath下,不够灵活
3. 在1.11版本后开启了gomodule,我们使用go mod 方式可以在任意的文件夹下开发
    好处:对开发友好,下载的所有项目依赖会自动放到GOPATH/pkg/mod目录下,成为一个公共的仓库,但是              gopath目录下的项目还是不会去这个地方检索依赖,这个仓库只针对mod模式
    
4. 最后检索依赖的地方是GOROOT下,标准库的包是从这个地方导入,我们约定成俗的做法是这个地方不存放第三方依赖
    

GOBIN

这个就是存放go编译安装可执行二进制文件的地方,我之前配置过,但是使用go install 命令的时候一直显示权限不足,所以我后期不配置这个环境变量,go 默认的是 GOPATH/bin目录存放go install 命令,我们只需要把这个目录添加到PATH环境变量中,让系统全局任何地方都能找到这个地方就好

所以我们需要在安装好的go环境下新建 mkdir -p ~/go/{bin,pkg,src},至此我们