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的作用对于如下所示的包找不到的错误就能快的定位和解决。
网友评论