Golang一種靜態(tài)強(qiáng)類型梧乘、編譯型、并發(fā)型夹供,并具有垃圾回收功能的編程語言。Golang提供了方便的安裝包哮洽,支持Windows、Linux鸟辅、Mac系統(tǒng)。
下載安裝包
Golang的官網(wǎng)是https://golang.org/匪凉,如果官網(wǎng)打不開,可以訪問https://golang.google.cn/這個(gè)域名洒缀。在官網(wǎng)點(diǎn)擊Download Go會進(jìn)入下載頁瑰谜,可以看到這里提供了針對各個(gè)系統(tǒng)的安裝包,也提供了源碼树绩,可以下載源碼編譯安裝萨脑。
下載運(yùn)行安裝包后,在terminal中執(zhí)行g(shù)o env命令饺饭,如果出現(xiàn)下面的輸出說明已經(jīng)安裝成功渤早。
GOROOT與GOPATH
仔細(xì)看上面的輸出,會發(fā)現(xiàn)其中有一個(gè)GOPATH瘫俊,又有一個(gè)GOROOT,那么到底哪個(gè)才是Golang的運(yùn)行環(huán)境呢扛芽。
首先訪問一下GOROOT這個(gè)路徑,會發(fā)現(xiàn)其中包含bin登下、lib等文件夾叮喳。GOROOT就是Golang的安裝路徑被芳,其中包含Golang編譯馍悟、工具、標(biāo)準(zhǔn)庫等锣咒,在安裝后就會存在。
和GOROOT不同壹将,GOPATH是工作空間路徑毛嫉,從go 1.8開始妇菱,如果GOPATH沒有被設(shè)置承粤,會有一個(gè)默認(rèn)值,在Unix上為$HOME/go仙粱,在Windows上為%USERPROFILE%/go彻舰,當(dāng)調(diào)用go build時(shí)伐割,它會在GOPATH中尋找源碼刃唤。訪問一下GOPATH這個(gè)路徑,會發(fā)現(xiàn)其中只有pkg硬霍、bin笼裳、src三個(gè)文件夾唯卖,并且里面基本是空的躬柬,這是一個(gè)約定的目錄結(jié)構(gòu),src文件夾用來存放源碼撩轰、pkg存放編譯后生成的文件昧廷,bin存放編譯后生成的可執(zhí)行文件堪嫂。項(xiàng)目代碼需要在GOPATH/src路徑下木柬。
GOPATH路徑下出了存放項(xiàng)目代碼,還存放所有通過go get安裝的依賴恶复,項(xiàng)目代碼和依賴代碼是平級的速挑,當(dāng)各個(gè)項(xiàng)目都有很多依賴的時(shí)候谤牡,這個(gè)GOPATH路徑下的代碼量會多的嚇人姥宝,并且難以拆分。
Vendor
2015年套么,Go 1.5加入了一個(gè)試驗(yàn)性的vendor機(jī)制(到2016年的Go 1.6版變?yōu)槟J(rèn)開啟),vendor機(jī)制就是在項(xiàng)目中加入了vendor文件夾胚泌,用于存放依賴,這樣就可以將不同項(xiàng)目的依賴隔離開玷室。
當(dāng)使用go run或者go build命令時(shí),會首先從當(dāng)前路徑下的vendor文件夾中查找依賴壁公,如果vendor不存在绅项,才會從GOPATH中查找依賴。
然而我們安裝依賴通常使用go get或者go install命令快耿,這兩個(gè)命令依舊會把依賴安裝到GOPATH路徑下。
包管理工具dep
Vendor只是go官方提供的一個(gè)機(jī)制掀亥,但是包管理的問題依然沒有解決,并且也沒有對依賴進(jìn)行版本管理遏片。如果要實(shí)現(xiàn)上述的功能撮竿,還需要借助包管理工具。
Go官方給出了包管理工具的對比:https://github.com/golang/go/wiki/PackageManagementTools
dep是官方的試驗(yàn)性包管理工具幢踏,可以通過如下腳本安裝
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
安裝完成后,進(jìn)入項(xiàng)目路徑房蝉,執(zhí)行
dep init
項(xiàng)目中會出現(xiàn)兩個(gè)文件一個(gè)目錄
Gopkg.toml
Gopkg.lock
vendor
dep包管理的流程如圖
solving功能搭幻,它將當(dāng)前項(xiàng)目中的導(dǎo)入包和Gopkg.toml中的規(guī)則作為輸入,不可變的依賴關(guān)系圖作為傳遞完成后的輸出檀蹋,形成Gopkg.lock。
vendor功能攻臀,將Gopkg.lock中的信息作為輸入焕数,確保項(xiàng)目編譯時(shí)能使用在Gopkg.lock文件中鎖定的版本刨啸。
使用如下命令添加依賴
dep ensure -add [github.com/gin-gonic/gin](http://github.com/gin-gonic/gin)
使用如下命令更新Gopkg.lock
dep ensure -update
歡迎關(guān)注知乎專欄【Golang私房菜】