一個(gè)Golang項(xiàng)目工程通常由bin、pkg、src三個(gè)子目錄構(gòu)成,gb在這個(gè)概念的基礎(chǔ)上新增了一個(gè)vendor目錄來(lái)存放項(xiàng)目依賴的第三方包;一個(gè)gb項(xiàng)目的工作目錄里包含該項(xiàng)目需要的所有Go代碼。
gb項(xiàng)目不放在你的$GOPATH中,也不需要為你的gb項(xiàng)目設(shè)置或修改$GOPATH。依賴的第三包需要放到vendor/src目錄中,并使用gb來(lái)編譯和測(cè)試你的項(xiàng)目。
安裝gb
gb的官網(wǎng)是:http://getgb.io/,github地址是:https://github.com/constabulary/gb/。
使用如下命令即可安裝gb:
go get github.com/constabulary/gb/...
安裝gb后,會(huì)有g(shù)b和gb-vendor兩個(gè)可執(zhí)行文件放入你的$GOPATH/bin目錄中,查看或編輯你的~/.bash_profile文件,確保你的$GOPATH/bin目錄已經(jīng)加入$PATH中:
export PATH=$PATH:$GOPATH/bin
使用gb進(jìn)行項(xiàng)目開發(fā)
我們以一個(gè)簡(jiǎn)單的提供HTTP頁(yè)面的“Hello World”程序來(lái)學(xué)習(xí)一下gb的使用。為了體現(xiàn)gb管理第三方包依賴的特性,我們引入一個(gè)支持HTTP服務(wù)優(yōu)雅重啟的第三方包github.com/tabalt/gracehttp。
創(chuàng)建gb項(xiàng)目目錄結(jié)構(gòu):
cd ~/helloworld
mkdir -p src/helloworld
mkdir -p vendor/src
編寫“Hello World”程序
#vim src/helloworld/main.go
package main
import (
"fmt"
"net/http"
"github.com/tabalt/gracehttp"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
})
err := gracehttp.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err)
}
}
添加依賴的第三包
gb vendor fetch github.com/tabalt/gracehttp
目前為止整個(gè)項(xiàng)目目錄結(jié)構(gòu)如下:
./
|-- src
|? `-- helloworld
|? ? ? `-- main.go
`-- vendor
|-- manifest
`-- src
`-- github.com
`-- tabalt
`-- gracehttp
|-- README.md
|-- connection.go
|-- gracehttpdemo
|? `-- main.go
|-- listener.go
`-- server.go
編譯執(zhí)行程序
gb build helloworld
./bin/helloworld
打開一個(gè)新終端并執(zhí)行curl http://127.0.0.1:8080/,將會(huì)輸出:
hello world
提交所有代碼到git倉(cāng)庫(kù)
git init
git add .
git commit -am 'init hello world project with gb'
git add remote -v $your_remote_git_repository
git push origin master:master
gb常用命令
在上面的項(xiàng)目開發(fā)中,我們用到了兩個(gè)命令gb build和gb vendor,實(shí)際上,build是我們之前所說的可執(zhí)行文件$GOPATH/bin/gb包含的,而vendor是gb的一個(gè)插件,最終調(diào)用的是可執(zhí)行文件$GOPATH/bin/gb-vendor。
可以通過gb help命令查看gb支持的更多命令,命令的具體用法可以通過gb help $command_name查看,很多gb命令都是在go命令行工具的基礎(chǔ)上做的包裝,用法也都相似,通過gb vendor help可以查看vendor插件具體用法,這里我們簡(jiǎn)單列舉如下:
gb 命令列表
命令功能
build編譯包
doc顯示文檔
env打印項(xiàng)目的環(huán)境變量
generate處理源代碼生成Go文件
info顯示項(xiàng)目的信息
list顯示項(xiàng)目下的所有包
test執(zhí)行測(cè)試
gb vendor 功能列表
參數(shù)功能
fetch獲取一個(gè)遠(yuǎn)程依賴
update更新一個(gè)本地依賴
list每行一個(gè)列出所有依賴
delete刪除一個(gè)本地依賴
purge清除所有未引用的依賴
restore從manifest清單文件還原依賴
原文鏈接:http://tabalt.net/blog/golang-package-dependency-management-tool-gb/
本博文章如無(wú)說明均為原創(chuàng),轉(zhuǎn)載時(shí)請(qǐng)注明以上鏈接