go 語言中的環(huán)境(GOPATH和GOROOT)
對于go語言的新手,理解go語言中的兩個環(huán)境變量GOROOT和GOPATH對于理解go語言的編譯運行和包組織管理機制非常重要,所以今天講解一下這兩個go語言的環(huán)境變量。
1.GOROOT
作用:go官方SDK和工具的安裝路徑,在下載
配置:在go env命令出現(xiàn)之前,需要在操作系統(tǒng)啟動配置文件中~/.bash_profile或~/.bashrc下添加
GOROOT=/home/ubuntu/sdk/?
export GOROOT
source ~/.bah_profile 卒稳,如果是配置的~/.bashrc就source ~/.bashrc重新加載環(huán)境
go env 工具出現(xiàn)之后,通過go程序的路徑推斷出來
which go 查看go的路徑如下圖:
推斷出GOROOT:home/ubuntu/sdk/go
GOROOT下的目錄結(jié)構(gòu):
其中主要理解pkg、src和bin三個目錄的作用
bin:可執(zhí)行程序的存放路徑键菱,例如go和gofmt 官方工具
pkg:go官方包編譯后的靜態(tài)庫文件存放路徑,go程序引用的官方包就是在這里查找并直接鏈接進程序中今布,而不是通過查找引用的官方包源碼編譯進程序经备,這也是為什么go的程序編譯快的一個原因,省略了對官方包的編譯過程
src:go官方包的源碼路徑
2.GOPATH
作用:go的自己包和第三包的管理路徑
配置:同GOPATH一樣部默,在go env出現(xiàn)之前要手動在操作系統(tǒng)配置文件中~/.bash_profile或~/.bashrc按如下配置
GOROOT=/home/ubuntu/go?
export GOROOT
source ~/.bah_profile 侵蒙,如果是配置的~/.bashrc就source ~/.bashrc重新加載環(huán)境
go env 工具出現(xiàn)之后默認是~/go
GOPATH下的目錄結(jié)構(gòu)如下:
bin:執(zhí)行g(shù)o install 生成的可執(zhí)行程序存放的位置
src:在沒使用go mod管理包時,使用go get 獲取的第三方包源代碼存放路徑
pkg:目錄結(jié)構(gòu)如下:
linux_amd64:go install 編譯后的靜態(tài)庫文件存放位置傅蹂,非官方包被程序引用時也會先來這里查找是否有編譯后的文件纷闺,有就鏈接算凿,能加快程序編譯的速度
mod:在使用go mod管理包機制時,go get 下載的對應(yīng)版本的包存放在這里急但。
結(jié)語:當(dāng)程序中引用包時澎媒,官方包go通過GOROOT查找引用包編譯進程序中,非官方包在GOPATH中查找包編譯波桩。所以理解GOPATH和GOROOT的作用對于如下所示的包找不到的錯誤就能快的定位和解決戒努。