Gop - 編譯和管理在GOPATH之外的Go工程
安裝
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
目錄下。
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 《快學 Go 語言》第 16 課 —— 包管理 GOPATH 和 VendorGo
- Go 編譯和工具鏈Go編譯
- 在 Windows 中編譯 Github 中的 GO 專案Windows編譯GithubGo
- 在 Ubuntu 開啟 GO 程式編譯之旅UbuntuGo編譯
- 【album】編譯工程編譯
- 編譯 App 工程編譯APP
- Go 語言的 GOPATH 設定方式Go
- Go編譯器簡介【譯】Go編譯
- Go 語言的GOPATH與gomod,新手坑Go
- go 交叉編譯,部署Go編譯
- 【go】【應用編譯】Go編譯
- go install: no install location for directory outside GOPATHGoIDE
- Go語言GOPATH是什麼Go
- cannot download, /home/azhukov/go is a GOROOT, not a GOPATHGo
- go的編譯優化問題Go編譯優化
- 【譯】Go和WebAssembly:在瀏覽器中執行Go程式GoWeb瀏覽器
- 前端工程中的編譯時優化前端編譯優化
- CMake編譯Qt工程時的問題編譯QT
- 編譯器的自展和自舉、交叉編譯編譯
- Go跨平臺交叉編譯Go編譯
- Go - armv7 交叉編譯Go編譯
- keystone和beaengine的編譯編譯
- 編譯器的符號表管理編譯符號
- 在C,C++,java和python執行時直譯器和編譯器的區別C++JavaPython編譯
- Gif開發筆記(一):gif介紹、編譯和工程模板筆記編譯
- Leptonica在VS2010中的編譯二,編譯 Leptonica1.68編譯
- [譯]使用Go Cloud的Wire進行編譯時依賴注入GoCloud編譯依賴注入
- Go 編譯時加入版本資訊Go編譯
- 預編譯過程(AO+GO)編譯Go
- Go語言交叉編譯工具goxGo編譯
- go語言編譯過程概述Go編譯
- 開源編譯工具和編譯軟體編譯
- Dart編譯技術在服務端的探索和應用Dart編譯服務端
- go設計模式之外觀模式Go設計模式
- badamczewski/PowerUp:Rust/Go語言的反編譯工具RustGo編譯
- 幽默:Go語言的編譯器 - programmerjoke9Go編譯
- TIR 的概念和編譯原理編譯原理
- 3568F-Qt工程編譯說明QT編譯
- 在Windows下編譯WebRTCWindows編譯Web