godep支援Go 1.5 vendor

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Go 1.5 vendor/實驗特性出爐後,市面上的go第三方包依賴和管理工具顯然都無法與之相容,除了修改代碼,別無它法。市場佔有率最大的godep做出了表 率,目前其最新版本(go get github.com/tools/godep)已經初步支援了這一實驗特性,即在GO15VENDOREXPERIMENT=1時,將使用vendor 目錄(而不是Godeps目錄)存放copy的第三方包,並在godep go build時不再rewrite GOPATH就可以實現利用vendor下第三方包的構建。下面我們就用例子來驗證一下Godep對vendor的支援。

一、升級godep到最新版本

如果要用到go 1.5 vendor,那麼godep要升級(go get -u github.com/tools/godep;go build github.com/tools/godep)到當前的最新版本“commit d8799f112f6c8dfe1e56142831bc3bb5c8796a0e”。最新版本相容老版本的功能,同時提供對go 1.5 vendor支援,兩者之間轉換的開關就是環境變數:GO15VENDOREXPERIMENT。

當GO15VENDOREXPERIMENT沒有被set時,godep沿用以前的方式;當GO15VENDOREXPERIMENT = 1時,godep將用vendor替代Godeps目錄以存放第三方包,同時go save將無法使用-r命令列選項(-r選項用於重寫源碼中的import path):

$ godep save -r
godep: flag -r is incompatible with the vendoring experiment

二、例子

下面是一個godep的例子(go 1.5 beta3),例子的目錄結構如下:

$(GOPATH)/src/tonybai.com/
     ├── app
     │   └── main.go
     └── foolib
         └── foolib.go

//foolib.go
package foo

import "fmt"

func Hello() {
    fmt.Println("Hello from foolib")
}

//main.go
package main

import "tonybai.com/foolib"

func main() {
    foo.Hello()
}

如果GO15VENDOREXPERIMENT沒有被set時,godep的各種命令將按之前的方式執行。

$ godep save
$ godep go build

$(GOPATH)/src/tonybai.com/
├── Godeps
│   ├── Godeps.json
│   ├── Readme
│   └── _workspace
│       └── src
│           └── tonybai.com
│               └── foolib
│                   └── foolib.go
├── app*
└── main.go

$./app
Hello from foolib

godep將第三方包放在Godeps/_workspace/src下面。godep go build會rewrite GOPATH以實現使用_workspace下面的第三方包來構建的目的。

如果GO15VENDOREXPERIMENT = 1,那麼godep會按照新的方式執行各種命令:
$ godep save
$ godep go build

$(GOPATH)/src/tonybai.com/
├── Godeps
│   ├── Godeps.json
│   └── Readme
├── app*
├── main.go
└── vendor
    └── tonybai.com
        └── foolib
            └── foolib.go

可以看出godep建立vendor目錄來存放第三方包,Godeps目錄依然保留,但只是存放Godeps.json,以儲存些第三方包的meta資訊:
//Godeps.json
{
    "ImportPath": "tonybai.com/app",
    "GoVersion": "go1.5beta3",
    "Deps": [
        {
            "ImportPath": "tonybai.com/foolib",
            "Rev": "7f2f94dc589ba9e053ef13b3b01fa327c27bf161"
        }
    ]
}

三、遷移

由於godep前後的兩種工作模式並不相容,因此大量存量的使用godep的repo,如果想使用Go 1.5 vendor,那麼在升級到Go 1.5之後需要做一些遷移工作。godep沒有提供自動的遷移工具,目前只能手動遷移,godep github首頁上給出了手動遷移的命令步驟:

$ unset GO15VENDOREXPERIMENT
$ godep restore

//如果之前使用了godep save -r,那麼下面這行命令將自動undo rewritten import。
$ godep save ./…

$ rm -rf Godeps
$ export GO15VENDOREXPERIMENT=1
$ godep save ./…
# You should see your Godeps/_workspace/src files "moved" to vendor/.

2015, bigwhite. 著作權.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.