Gop - 編譯和管理在GOPATH之外的Go工程

lunny發表於2017-08-16

安裝

go get github.com/lunny/gop

起子

自開始使用 Go 進行開發之後,工程一直都儲存在 GOPATH 之下,Go1.5 支援 vendor 機制之後開始使用 govendor 來管理依賴項。其實一直都有需求要將 Go 的工程放在 GOPATH 之外,因為在一個大的專案中,各種語言寫的內容放在一個 git 工程的子資料夾中,但一直沒有很好的工具來解決依賴的問題。

幾個月之前,這個問題已經嚴重影響到工作了,終於不能忍受了。於是動手寫了 Gop 的首個版本,最近又升級到了 0.3 版本。最新版本的 Gop 工程目錄結構如下:

<project root>
├── gop.yml
├── bin
├── doc
└── src
    ├── main
    │   └── main.go
    ├── models
    │   └── models.go
    ├── routes
    │   └── routes.go
    └── vendor
        └── github.com
            ├── go-xorm
            │   ├── builder
            │   ├── core
            │   └── xorm
            └── lunny
                ├── log
                └── tango

通過以上的目錄結構可以看到,其實 gop 是相容 GOPATH 的。只要把 <project root> 設定到 GOPATH 中,即使沒有安裝gop命令,通過go命令也可以編譯,但是這時對 vendor 管理也是不太方便。但如果使用 gop 來管理專案,則問題迎刃而解。

其中 gop.yml 的結構如下:

targets:
- name: myproject1
  dir: main
  assets:
  - templates
  - public
  - config.ini
  - key.pem
  - cert.pem
- name: myproject2
  dir: web
  assets:
  - templates
  - public
  - config.ini

除了可以放到 GOPATH 之外,Gop 工程還具有以下特性:

  • 多編譯目標支援

預設的編譯目標是 src/main 目錄,編譯名字是 src 的父目錄的名字,當然你也可以通過 gop.yml 來自定義。如果輸入gop build 命令,預設會編譯第一個編譯目標。如果指定了編譯目標,如 gop build myproject2 那麼將會編譯指定的目標。預設編譯好的可執行檔案會放在 src/main/ 目錄下,也可以通過 gop build -o ./bin/my.exe 來進行指定。除了 <target> 引數外,其它的引數和 go build 的引數相同。

  • 依賴管理

一般只需要執行 gop ensure -g 即可將所有的依賴項全部下載且拷貝到 vendor 下。如果依賴項需要更新,也可以使用 gop ensure -u 將所有的依賴項更新到最新的版本。不再需要的依賴項,可以通過 gop rm <package1> <package2> 刪除,通過 gop status 可以檢視預設編譯目標的依賴項的安裝情況。

  • 編譯並執行某個目標

gop run 可以讓你編譯並執行某個目標,通過 -w,在原始碼修改之後還可以自動重新編譯並執行。

  • 釋出管理

gop release 編譯,打包資源並拷貝到 bin 目錄下。

更多原創文章乾貨分享,請關注公眾號
  • Gop - 編譯和管理在GOPATH之外的Go工程
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章