2016-12-12 5 views
0

nehmen sich an, ich habe ein Paket mypackage die Build() ein Verfahren, beispielsweise aussetzt, die eine konkrete Struktur von einer Dritten Bibliothek ausgesetzt gibt, lassen Sie sich thirdpartypackageGolang Anbieter Paket mit verkauften Unterpaketen

genannt So zum Beispiel :

package mypackage 

import tpp "github.com/thirdpartycompany/thirdpartypackage" 

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

Das Paket, das SharedStruct aussetzt innerhalb mypackage weiterverkauft, weil ich es verteilen wollen und das Paket unabhängig zu machen.

Jetzt, nach mypackage in einem anderen Projekt zu importieren und mit thirdpartypackage in meinen Tests (Ich brauche es einige Integrationstests zu machen), ich sehe die folgenden Fehler:

nicht XXXX verwenden (Typ „GitHub. com/mycompany/mymainproject/vendor/github.com/mycompany/meinpackage/vendor/github.com/thirdcompany/thirdpartypackage-go ".Token) als typ" github.com/empatica/mycompany/vendor/github.com/thirdcompany/ dritypartypackage "

Grundsätzlich unterscheidet der Compiler das herstellereigene Third-Party-Paket in meiner Bibliothek und das vendored-Paket, das ich in meinen m ein Projekt.

Gibt es Möglichkeiten, dieses Problem zu lösen (die nicht die herstellerabhängigen Abhängigkeiten aus meiner Bibliothek entfernen, wie vorgeschlagen here)? Oder ich vermisse etwas?

Danke!

+1

Vendoring funktioniert gut für Befehle und weniger gut für einzelne Pakete ... – Volker

+0

Können Sie geben Sie Ihre genaue Verzeichnisstruktur Ihr Punkt ist nicht klar –

+1

Dies ist der Grund, warum die meisten Verkäufer-Tool das Händlerverzeichnis abflachen. Govendor macht das standardmäßig, ich bin mir nicht sicher, ob es andere Tools von Anbietern gibt. Das Paradigma, das ich für unsere zum Importieren bestimmten Bibliotheken (im Gegensatz zu Apps selbst) verwendet habe, ist das Hinzufügen von '/ vendor/* /' zu unserem '.gitignore'. Dies ignoriert Unterordner in '/ vendor /', aber keine Dateien (wie 'vendor.json', für govendor). Govendor behandelt dann elegant die Abflachung der Abhängigkeitsstruktur, und Ihr Fehler verschwindet, da beide Pakete jetzt denselben vollqualifizierten Importpfad für das Paket der Struktur verwenden. – Kaedys

Antwort

0

denke ich, was Sie vermissen der Punkt

Code below a directory named "vendor" is importable only by code in the directory tree rooted at the parent of "vendor", and only using an import path that omits the prefix up to and including the vendor element.

ist also, was ich bin immer von Ihrem Problem wird Ihr mypackage ist mit Verkäufer als Kind so, wenn sein von einem anderen Paket auf dem gleichen Niveau importiert werden als aus offensichtlichen Grund können sie sehen, dass die Liste nicht weiterverkauft

You can understand this samely to as Protected feature

so, wenn Sie diese Version in einem anderen Paket verwenden möchten, als dieser Anbieter auf dem gleichen Niveau zum Beispiel

01 vorhanden sein sollte,
ParentDirectory 
>mypackage 
>otherpackage(this will be importing mypackage) 
>vendor(vendor should be present in here so that all child under Parent can access this") 

Ich hoffe, dass ich mit meinem Punkt klar bin.

Verwandte Themen