簡體   English   中英

使用標簽獲取Go軟件包依賴關系

[英]Fetching Go package dependencies using tags

如何使用特定導入上的版本標簽一次獲取Go軟件包的所有依賴關系?

假設我的go樹上有多個包:

src/
    foo/
        bar/               (go code in package bar)
            x.go
        quux/              (go code in package main)
            y.go

現在讓軟件包“ bar”依賴於使用標簽版本的第三方庫
(即通常使用: go get -tags mylib_2.0 github.com/user/mylib

我想做的是在導入行上指定一個標簽,這樣我樹上的get。/ ...就可以得到正確的版本方案。 就像是:

import "github.com/user/mylib" `tags=mylib_2.0`

也改變您的項目結構:

src/
    foo/
        bar/
           v1/    (go code in package bar)
              x.go
           v2/
              x.go
        quux/ 
             v1/   (go code in package main)
                y.go

這是處理不同版本的lib的唯一可能方法。

這樣,您還可以解決jnml所述的問題,現在每個庫都具有與其他庫的依賴關系和版本。

由於評論而更新:

根據此處描述的工作空間文檔:
http://golang.org/doc/code.html#Workspaces

你的結構看起來像

src/
    foo/
        bar/
           v1/    (go code in package bar)
              x.go
           v2/
              x.go
        quux/ 
             v1/   (go code in package main)
                y.go
        meier/ 
             v1/   (go code in package main)
                w.go
             v2/   (go code in package main)
                w.go

現在在bar lib(x.go)中,您需要lib * quux(y.go)中的函數
導入這個,你會寫:

import "foo/quux/v1/"

就像要注意的那樣,您還可以在結構中進行打包之前的版本,因此您的結構可能看起來像/ foo / v1 / quux,而不是foo / quux / v1,因此無需命名導入。

現在lib quux在版本1中使用lib meier
因此導入將是:

import "foo/meier/v1"

關於jnml,現在您的lib bar也需要lib meier,但是在版本2中
因此導入看起來像:

import "foo/meier/v2"

現在,當您致電: bar-> quux-> meier
您會看到您無法將bar中的返回值分配/傳遞給meier的東西

因為: meier / v1!= meier / v2

並且在編譯過程中這將已經失敗。

如果您需要處理來自meier v1的 quux結果,則還需要在欄中導入meier / v1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM