2

状況:

というパッケージがあるとしましょうmypackage。という 1 つのメソッドを公開します。このメソッドは、次のように、Build()というサードパーティ ライブラリによって公開された具体的な構造体を返します。thirdpartypackage

package mypackage

import tpp "github.com/thirdpartycompany/thirdpartypackage"

func Build() *tpp.SharedStruct{
   //...implementation
}

公開するパッケージは、配布してそのパッケージを独立させたいため、SharedStruct内でベンダー化されています。mypackage

問題:

mypackage別のプロジェクトにインポートしthirdpartypackageて (統合) テストで使用した後、次のエラーが発生します。

XXXX (タイプ "github.com/mycompany/mymainproject/vendor/github.com/mycompany/mypackage/vendor/github.com/thirdcompany/thirdpartypackage-go".Token) をタイプ "github.com/empatica/mycompany/" として使用することはできませんvendor/github.com/thirdcompany/thirdpartypackage"

基本的に、コンパイラは、ライブラリ内のベンダーのサードパーティ パッケージと、メイン プロジェクトに配置したベンダーのパッケージを区別しています。

質問:

ここで提案されているように、ベンダーの依存関係をライブラリから削除しないで、この問題を解決する方法はありますか? 何か不足していますか?

4

1 に答える 1

3

あなたが欠けているのはこの点だと思います:

「vendor」という名前のディレクトリの下のコードは、「vendor」の親をルートとするディレクトリ ツリー内のコードによってのみインポート可能であり、ベンダー要素までのプレフィックスを省略したインポート パスを使用する場合にのみインポートできます。( go コマンド)

あなたの問題から私が理解しているのは、mypackageベンダーが子としてあるため、同じレベルの他のパッケージによってインポートされた場合、明らかな理由でそのベンダーリストを見ることができないということです。

これは、機能に似ていると理解できprotectedます。

したがって、そのバージョンを他のパッケージで使用する場合は、これvendorが同じレベルに存在する必要があります。例えば

ParentDirectory
 > mypackage
 > otherpackage (this will be importing mypackage)
 > vendor (vendor should be present in here so that all children under ParentDirectory can access this)

私の主張が明確であることを願っています。

于 2016-12-12T11:55:38.327 に答える