GOROOT、GOPATH,、GOBIN,、project目錄前言:我覺(jué)得Java程序員學(xué)golang很容易上手,。關(guān)于GOROOT,、GOPATH、GOBIN這些環(huán)境變量的設(shè)置,,我隱約感覺(jué)到了java的影子(盡管我是一個(gè)C++程序員),,唯一和java不同的是不能設(shè)置“.”。 另外,,golang的設(shè)計(jì)也很明顯的透露著“約定優(yōu)于配置”的原則,。這在java很多框架里面很常見(jiàn)。golang的環(huán)境變量設(shè)計(jì)也是如此,。從Android和golang我覺(jué)得google喜歡java,。 不了解java的C++程序員,可以嘗試全新去理解golang,。 GOROOTgolang安裝路徑,。 GOPATH官方解釋,請(qǐng)google,。Go工作環(huán)境中常常用到的一個(gè)很重要的環(huán)境變量(這種設(shè)計(jì)類似java),。具體用途:go命令常常需要用到的,如go run,,go install,, go get等。允許設(shè)置多個(gè)路徑,,和各個(gè)系統(tǒng)環(huán)境多路徑設(shè)置一樣,,windows用“;”,Linux(mac)用“:”分隔,。 在linux(Mac)下,,為了方便,一般配置在~/.bash_profile中。
book:~ wukebing$ source ~/.bash_profile //編輯完成后,,使立即生效 例如:我的GOPATH設(shè)置(MAC下)
其中,,“ 當(dāng)存在多個(gè)路徑時(shí),,好像優(yōu)先采用第一個(gè)路徑,。這個(gè)無(wú)關(guān)緊要了,只有需要的第三方包(庫(kù))都能正確下載和使用就ok了,。 GOBINgo install編譯存放路徑,。不允許設(shè)置多個(gè)路徑??梢詾榭?。為空時(shí)則遵循“約定優(yōu)于配置”原則,可執(zhí)行文件放在各自GOPATH目錄的bin文件夾中(前提是:package main的main函數(shù)文件不能直接放到GOPATH的src下面,。 go環(huán)境查看用go env 可查看當(dāng)前go環(huán)境變量,。 GOPATH目錄結(jié)構(gòu)
go目錄結(jié)構(gòu)1:
package main文件直接在GOPATH目錄到src下。 使用go build可以在src文件夾下編譯生成名為“src”的可執(zhí)行文件,。這是golang默認(rèn)約定,。一般我個(gè)人不怎么用這個(gè)命令。因?yàn)樗鼤?huì)生成可執(zhí)行文件在src目錄下面,。 我一般用:go get 和 go install,。 go get [main.go所在路徑]參數(shù) [main.go所在路徑]:可選。相對(duì)GOPATH/src路徑,。 缺省是.(src自己),。可指定src下面的子文件夾路徑,。 go install [main.go所在路徑]參數(shù) [main.go所在路徑]:可選,。 相對(duì)GOPATH/src路徑,。缺省是.(即當(dāng)前所在目錄或工作目錄),。可指定src下面的子文件夾,。 我們?cè)倏创薵o目錄結(jié)構(gòu)1,,執(zhí)行g(shù)o install(以及go get的第二階段go install)會(huì)報(bào)錯(cuò): 注意:如果不用額外方式改變環(huán)境變量(公司目前用的是sh腳本編譯),是編譯不過(guò)的,。報(bào)錯(cuò):can’t load package: package .: no buildable Go source files in * 解決方法1: 此解決方法有個(gè)弊端,,多個(gè)project會(huì)導(dǎo)致多個(gè)GOPATH目錄。多個(gè)project下的目錄結(jié)構(gòu)和包一致的話,,直接編譯會(huì)導(dǎo)致編譯問(wèn)題,。因?yàn)間o優(yōu)先使用第一個(gè)GOPATH目錄,導(dǎo)致編譯沖突,。(當(dāng)然,,你也可以每次手工或腳步修改GOPATH環(huán)境變量,感覺(jué)很麻煩,。)不建議多個(gè)project直接設(shè)置到茫茫多的GOPATH中,。當(dāng)然有解決方法2,我認(rèn)為是標(biāo)準(zhǔn)合理的解決方法,,就是下面go目錄結(jié)構(gòu)2了,。 go目錄結(jié)構(gòu)2:
一個(gè)solution里面的多個(gè)project或工具組件都并列放在GOPATH的src下,如myApp1,,myApp2,,myApp3,,common utils。 這時(shí)才是大家都認(rèn)為的,,把可執(zhí)行程序myApp1,、myApp2、myApp3生成在goWorkSpace/bin下面,。多個(gè)GOPATH也就有了上面的“把每個(gè)GOPATH下的bin都加入到PATH中”,。
也可以設(shè)置GOBIN,而且這時(shí),,由于可執(zhí)行文件名稱不同,,也不大容易產(chǎn)生覆蓋(需要避免的時(shí)多個(gè)GOPATH用相同的“myApp”project名稱。) 具體的還是看個(gè)人喜好和實(shí)際情況,。我個(gè)人本地的環(huán)境大致是:
也就是我本地是有多個(gè)GOPATH路徑的dir/goWorkSpace1,、dir/goWorkSpace2。 我一般不設(shè)置GOBIN,,把每個(gè)GOPATH下的bin都加入到PATH中,。 個(gè)人理解,有任何問(wèn)題,,歡迎指正,。 |
|
來(lái)自: openlog > 《技術(shù)探討》