web-dev-qa-db-fra.com

Importer une structure depuis un autre paquet et fichier golang

J'ai de la difficulté à importer un type à partir d'un autre package et fichier. La structure que j'essaie d'importer est celle ci-dessous.

type PriorityQueue []*Item

type Item struct {
   value string
   priority int   
   index int 
}

Si je mettais la PriorityQueue à côté de toutes ses méthodes dans le même fichier, je la déclarerais avec

pq:= &PriorityQueue{}

J'ai cherché Internet comme un fou pour trouver une réponse à cette question simple, mais je n'ai pas trouvé de réponse. Je programme habituellement en Java et les classes d'importation sont très élémentaires. 

18
Jakob Svenningsson

Dans Go, vous n’importez ni types ni fonctions, vous importez packages (voir Spec: déclarations d’importation ).

Un exemple de déclaration d'importation:

import "container/list"

Et en important un paquet, vous avez accès à tous ses identifiants exports et vous pouvez vous y référer en tant que packagename.Identifiername, par exemple:

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

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

Il y a quelques astuces dans la déclaration d'importation, par exemple en faisant:

import m "container/list"

Vous pouvez faire référence aux identifiants exportés avec "m.Identifiername", par exemple.

l := m.New()

Aussi en faisant:

import . "container/list"

Vous pouvez laisser complètement le nom du paquet:

l := New()

Mais utilisez-les uniquement "en cas d'urgence" ou lorsqu'il y a des collisions de noms (qui sont rares).

41
icza

Ce que @icza a dit plus haut:

Avec Go 1.9, il existe des alias de types qui vous permettent de séparer des types de packages dans des types ressemblant à des types locaux:

package.go contenu:

type A struct {
    X, Y int
}

main.go contenu:

...

import myTypes "path/to/package"

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

...
1
ddotsenko