gb藏研,gb 是一個 golang 的項目構(gòu)建工具弹灭。gb 的目標(biāo)是沒有蛀牙……
gb 的人生四個目標(biāo):
- 基于項目的工作流程
- 自動探測項目
- 0 配置文件
- 在 Windows 上工作
3、4 都比較好理解纠修,借助 golang 的特性,大部分 golang 程序都可以在 windows 上中跑得不錯,當(dāng)然需要小心處理一些跨平臺帶來的問題茎刚。1,還好吧撤逢;2 估計就是自動識別項目中的包包了膛锭。
golang 原來的工作流程是搞個地兒,然后再占個坑($GOPATH)蚊荣,再接著事情就在這個坑里辦完了初狰;吃喝……都這里面,夠亂了吧互例。
golang 1.5 開始又搞了一個實驗性質(zhì)的 vendor 機(jī)制奢入,不過基本上也是圍繞 $GOPATH
搞的。
之前用著無聞先生媳叨?造的 gopm腥光。gopm 的優(yōu)點是可以直到 github 世界,沒有紅杏糊秆、沒有梯子武福,真正的直到 github 世界。另一個優(yōu)點是保持 $GOPATH
干凈痘番,因為默認(rèn)情況下 gopm 下載回來的包包是在 ~/.gopm
目錄下的捉片。使用方法也相當(dāng)簡單:
go build => gopm build
go get => gopm get
就是這么輕松這么愉快。不過有時 gopm build
會不好使夫偶;這是怎么辦呢界睁?首先是 gopm get -g
然后再 go build
就可以了。-g
的作用是將第三方包下載到 $GOPATH
中兵拢。
所以 gopm 多少還是有一些問題翻斟。
回到 gb。
gb 的項目基本上還是 golang 風(fēng)格:
% gb build all
hello
% bin/hello
Hello gb
% tree $PROJECT
/home/dfc/code/demo-project
├── bin
│ └── hello
└── src
└── hello
└── hello.go
自己的包這里:
$PROJECT/src/
別人的包在這里:
$PROJECT/vendor/src/
gb 文檔也特別提到版本管理的問題说铃,最好是將 $PROJECT
加入的文件倉庫中访惜,注意需要忽略 $PROJECT/bin
和 $PROJECT/pkg
中的文件,這兩個文件夾實際是編譯好的二進(jìn)制文件腻扇,和 golang 中的項目規(guī)范是同樣意義的债热。
gb 提供了一個不錯的插件:gb vendor
,一個用于管理項目 vendor 的工具幼苛。
如果單純從第三包管理這個問題上來講窒篱,gb 還不如 gopm 好使。與 1.5 機(jī)制比起來,gb 的 vendor 是在項目 $PROJECT
目錄下墙杯,起碼看起來還是正常的配并;1.5 的 vendor 機(jī)制還是比較奇怪。
不過最大的懸念是為什么 golang 需要 $GOPATH
高镐?