Go Importazione di pacchetti


Esempio

Puoi importare un singolo pacchetto con l'istruzione:

import "path/to/package"

o raggruppare più importazioni insieme:

import (
    "path/to/package1"
    "path/to/package2"
)

Verrà visualizzato nei percorsi di import corrispondenti all'interno di $GOPATH per i file .go e consente di accedere ai nomi esportati tramite packagename.AnyExportedName .

Puoi anche accedere ai pacchetti locali all'interno della cartella corrente facendo precedere i pacchetti con ./ . In un progetto con una struttura come questa:

project
├── src
│   ├── package1
│   │   └── file1.go
│   └── package2
│       └── file2.go
└── main.go

Puoi chiamarlo in main.go per importare il codice in file1.go e file2.go :

import (
    "./src/package1"
    "./src/package2"
)

Dato che i nomi dei pacchetti possono collidere in diverse librerie, è possibile che si desideri creare un alias di un pacchetto con un nuovo nome. Puoi farlo anteponendo la tua dichiarazione di importazione con il nome che desideri utilizzare.

import (
    "fmt" //fmt from the standardlibrary
    tfmt "some/thirdparty/fmt" //fmt from some other library
)

Questo ti permette di accedere al precedente pacchetto fmt usando fmt.* E il secondo pacchetto fmt usando tfmt.* .

È inoltre possibile importare il pacchetto nel proprio spazio dei nomi, in modo da poter fare riferimento ai nomi esportati senza il package. prefisso utilizzando un singolo punto come alias:

import (
    . "fmt"
)

L'esempio precedente importa fmt nello spazio dei nomi globale e consente di chiamare, ad esempio, direttamente Printf : Playground

Se importi un pacchetto ma non usi nessuno dei suoi nomi esportati, il compilatore Go stamperà un messaggio di errore. Per aggirare questo problema, puoi impostare l'alias sul carattere di sottolineatura:

import (
    _ "fmt"
)

Questo può essere utile se non si accede direttamente a questo pacchetto, ma è necessario eseguire le sue funzioni init .

Nota:

Poiché i nomi dei pacchetti si basano sulla struttura delle cartelle, qualsiasi modifica nei nomi delle cartelle e dei riferimenti di importazione (inclusa la distinzione tra maiuscole e minuscole) causerà un errore di compilazione "collisione di importazione senza distinzione tra maiuscole e minuscole" in Linux e OS-X, che è difficile da tracciare e aggiusta (il messaggio di errore è piuttosto criptico per i comuni mortali poiché cerca di esprimere il contrario - che, il confronto non è riuscito a causa della distinzione tra maiuscole e minuscole).

ex: "percorso / su / Pacchetto1" vs "percorso / su / pacchetto1"

Esempio dal vivo: https://github.com/akamai-open/AkamaiOPEN-edgegrid-golang/issues/2