程序员

2020-07-20

2020-07-26  本文已影响0人  天使的靠翅膀

go 语言中的环境(GOPATH和GOROOT)

对于go语言的新手,理解go语言中的两个环境变量GOROOT和GOPATH对于理解go语言的编译运行和包组织管理机制非常重要,所以今天讲解一下这两个go语言的环境变量。

1.GOROOT

作用:go官方SDK和工具的安装路径,在下载

配置:在go env命令出现之前,需要在操作系统启动配置文件中~/.bash_profile或~/.bashrc下添加

GOROOT=/home/ubuntu/sdk/ 

export GOROOT

source ~/.bah_profile ,如果是配置的~/.bashrc就source ~/.bashrc重新加载环境

go env 工具出现之后,通过go程序的路径推断出来

which go 查看go的路径如下图:

go程序执行路径

推断出GOROOT:home/ubuntu/sdk/go

GOROOT下的目录结构:

GOROOT路径结构

其中主要理解pkg、src和bin三个目录的作用

bin:可执行程序的存放路径,例如go和gofmt 官方工具

pkg:go官方包编译后的静态库文件存放路径,go程序引用的官方包就是在这里查找并直接链接进程序中,而不是通过查找引用的官方包源码编译进程序,这也是为什么go的程序编译快的一个原因,省略了对官方包的编译过程

src:go官方包的源码路径

2.GOPATH

作用:go的自己包和第三包的管理路径

配置:同GOPATH一样,在go env出现之前要手动在操作系统配置文件中~/.bash_profile或~/.bashrc按如下配置

GOROOT=/home/ubuntu/go 

export GOROOT

source ~/.bah_profile ,如果是配置的~/.bashrc就source ~/.bashrc重新加载环境

go env 工具出现之后默认是~/go

GOPATH下的目录结构如下:

GOPATH的目录结构

bin:执行go install 生成的可执行程序存放的位置

src:在没使用go mod管理包时,使用go get 获取的第三方包源代码存放路径

pkg:目录结构如下:

pkg目录结构

linux_amd64:go install 编译后的静态库文件存放位置,非官方包被程序引用时也会先来这里查找是否有编译后的文件,有就链接,能加快程序编译的速度

mod:在使用go mod管理包机制时,go get 下载的对应版本的包存放在这里。

结语:当程序中引用包时,官方包go通过GOROOT查找引用包编译进程序中,非官方包在GOPATH中查找包编译。所以理解GOPATH和GOROOT的作用对于如下所示的包找不到的错误就能快的定位和解决。

上一篇下一篇

猜你喜欢

热点阅读