GOPATH是你的工作目錄,對于項目文件而言,項目的結(jié)構(gòu)和你的工作目錄的結(jié)構(gòu)有很大關(guān)系。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比羅田網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式羅田網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋羅田地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
GOPATH路徑下默認是有以下三個目錄的,
1.src 存放源代碼(比如:.go .c .h .s等)
2.pkg 編譯后生成的文件(比如:.a)
3.bin 編譯后生成的可執(zhí)行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)
golang的 GOPATH和vendor的搜索關(guān)系
項目只有一個包,即main包,沒有引用其他的包(golang自帶的系統(tǒng)包除外)。
然后設(shè)置GOPATH=path/to/goproject,再運行g(shù)o build myproject,這樣就可以在任何目錄下面編譯,編譯生成的可執(zhí)行文件就在編譯所在的目錄下,而不是包源文件所在的目錄。
基本規(guī)則:
鑒于此,建議golang項目必須嚴格按照規(guī)范的目錄結(jié)構(gòu)組織,哪怕是前面這種自包含的項目。
基本規(guī)則:
如果一個包在vendor和GOPATH下面都存在那么誰會優(yōu)先使用呢。
結(jié)論是:
包mydeps在vendor目錄下面和GOPATH路徑下面都存在了,那么main.go引用的時候只會引用vendor下面的mydeps(src/myproject/vendor/mydeps),而忽略GOPATH下面的mydeps包(src/mydeps)。
前面提到GOPATH和PATH類似,可以包含多個路徑,中間用分號隔開,go在搜索包的時候會按手續(xù)從前往后搜搜。那么vendor怎么處理層級關(guān)系呢。
規(guī)則是:
舉例:
如果src/mydep/mydep1/mydep.go引用了myvendor1和myvendor,那是怎么搜索的呢
可以簡單理解為:
$GOPATH 是go的工程目錄
/home/guest/gocode
├── bin
├── pkg
└── src
$GOROOT 是go的安裝目錄
/home/guest/tools/go
├── api
├── AUTHORS
├── bin
├── blog
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── doc
├── favicon.ico
├── lib
├── LICENSE
├── misc
├── PATENTS
├── pkg
├── README.md
├── robots.txt
├── src
├── test
└── VERSION