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.
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).
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
...