it-swarm.com.de

Importieren Sie struct aus einem anderen Paket und einer anderen Datei

Beim Versuch, einen Typ aus einem anderen Paket und einer anderen Datei zu importieren, ist ein Problem aufgetreten. Die Struktur, die ich zu importieren versuche, ist die darunter.

type PriorityQueue []*Item

type Item struct {
   value string
   priority int   
   index int 
}

Wenn ich die PriorityQueue mit all ihren Methoden in derselben Datei zusammenfassen würde, würde ich sie mit deklarieren

pq:= &PriorityQueue{}

Ich habe wie ein Verrückter im Internet nach einer Antwort auf diese einfache Frage gesucht, aber ich habe keine Antwort gefunden. Normalerweise programmiere ich in Java und importiere Klassen so elementar. 

18

In Go importieren Sie keine Typen oder Funktionen. Sie importieren packages (siehe Spec: Importdeklarationen ).

Ein Beispiel für eine Importanmeldung:

import "container/list"

Durch das Importieren eines Pakets erhalten Sie Zugriff auf alle exported - Bezeichner, und Sie können auf diese als packagename.Identifiername verweisen, zum Beispiel:

var mylist *list.List = list.New()

// Or simply:
l := list.New()

Es gibt einige Tricks in der Importdeklaration, zum Beispiel:

import m "container/list"

Sie könnten sich mit "m.Identifiername" auf die exportierten Bezeichner beziehen, z.

l := m.New()

Auch durch:

import . "container/list"

Sie können den Paketnamen vollständig weglassen:

l := New()

Verwenden Sie diese jedoch nur "im Notfall" oder bei Namenskollisionen (die selten sind).

41
icza

Was @icza oben gesagt hat plus:

Mit Go 1.9 gibt es Typ-Aliasnamen, mit denen Sie Typen von Paketen in die Art lokaler Typen ziehen können:

package.go inhalt:

type A struct {
    X, Y int
}

main.go inhalt:

...

import myTypes "path/to/package"

// note the equal sign
type A = myTypes.A

...
1
ddotsenko