Capire il GOPATH

Introduzione

Questo articolo ti aiuterà a capire cos’è il GOPATH, come funziona e come impostarlo. Questo è un passo cruciale per impostare un ambiente di sviluppo Go, così come capire come Go trova, installa e costruisce i file sorgente. In questo articolo useremo GOPATH per riferirci al concetto di struttura delle cartelle di cui parleremo. Useremo $GOPATH per riferirci alla variabile d’ambiente che Go usa per trovare la struttura delle cartelle.

Un Go Workspace è il modo in cui Go gestisce i nostri file sorgente, i binari compilati e gli oggetti nella cache usati per una compilazione più veloce in seguito. È tipico, e anche consigliato, avere un solo Go Workspace, sebbene sia possibile avere più spazi. La GOPATH funge da cartella radice di uno spazio di lavoro.

Impostare la variabile d’ambiente $GOPATH

La variabile d’ambiente $GOPATH elenca i posti in cui Go deve cercare gli spazi di lavoro Go.

Per default, Go assume che la nostra posizione GOPATH sia a $HOME/go, dove $HOME è la directory principale del nostro account utente sul nostro computer. Possiamo cambiare questo impostando la variabile d’ambiente $GOPATH. Per ulteriori approfondimenti, segui questo tutorial sulla lettura e l’impostazione delle variabili d’ambiente in Linux.

Per maggiori informazioni sull’impostazione della variabile $GOPATH, vedi la documentazione di Go.

Inoltre, questa serie guida all’installazione di Go e alla configurazione di un ambiente di sviluppo Go.

$GOPATH non è $GOROOT

Il $GOROOT è dove risiede il codice di Go, il compilatore e gli strumenti – questo non è il nostro codice sorgente. Il $GOROOT di solito è qualcosa come /usr/local/go. Il nostro $GOPATH è di solito qualcosa come $HOME/go.

Anche se non abbiamo più bisogno di impostare specificamente la variabile $GOROOT, è ancora referenziata nei materiali più vecchi.

Ora, discutiamo la struttura dello spazio di lavoro di Go.

Anatomia dello spazio di lavoro di Go

In uno spazio di lavoro di Go, o GOPATH, ci sono tre directory: bin, pkg e src. Ognuna di queste directory ha un significato speciale per la catena di strumenti Go.

.├── bin├── pkg└── src └── github.com/foo/bar └── bar.go

Diamo un’occhiata a ciascuna di queste directory.

La directory $GOPATH/bin è dove Go mette i binari che go install compila. Il nostro sistema operativo usa la variabile d’ambiente $PATH per trovare applicazioni binarie che possono essere eseguite senza un percorso completo. Si raccomanda di aggiungere questa directory alla nostra variabile globale $PATH.

Per esempio, se non aggiungiamo $GOPATH/bin a $PATH per eseguire un programma da lì, dovremmo eseguire:

  • $GOPATH/bin/myapp

Quando $GOPATH/bin viene aggiunto a $PATH possiamo fare la stessa chiamata in questo modo:

  • myapp

La directory $GOPATH/pkg è dove Go memorizza i file oggetto precompilati per velocizzare la successiva compilazione dei programmi. Tipicamente, la maggior parte degli sviluppatori non avrà bisogno di accedere a questa directory. Se hai problemi con la compilazione, puoi tranquillamente cancellare questa directory e Go la ricostruirà.

La directory src è dove tutti i nostri file .go, o codice sorgente, devono essere situati. Questo non dovrebbe essere confuso con il codice sorgente che gli strumenti di Go usano, che si trova nella $GOROOT. Mentre scriviamo applicazioni Go, pacchetti e librerie, metteremo questi file sotto $GOPATH/src/path/to/code.

Cosa sono i pacchetti?

Il codice Go è organizzato in pacchetti. Un pacchetto rappresenta tutti i file in una singola directory sul disco. Una directory può contenere solo alcuni file dello stesso pacchetto. I pacchetti sono memorizzati, con tutti i file sorgente Go scritti dall’utente, sotto la directory $GOPATH/src. Possiamo capire la risoluzione dei pacchetti importando diversi pacchetti.

Se il nostro codice vive in $GOPATH/src/blue/red allora il suo nome di pacchetto dovrebbe essere red.

La dichiarazione di importazione per il pacchetto red sarebbe:

import "blue/red"

I pacchetti che vivono in repository di codice sorgente, come GitHub e BitBucket, hanno la posizione completa del repository come parte del loro percorso di importazione.

Per esempio, dovremmo importare il codice sorgente a https://github.com/gobuffalo/buffalo utilizzando il seguente percorso di importazione:

import "github.com/gobuffalo/buffalo"

Quindi, questo codice sorgente sarebbe nella seguente posizione sul disco:

$GOPATH/src/github.com/gobuffalo/buffalo

Conclusione

In questo articolo abbiamo discusso il GOPATH come un insieme di cartelle in cui Go si aspetta che il nostro codice sorgente viva, così come cosa sono queste cartelle e cosa contengono. Abbiamo discusso come cambiare quella posizione dal default di $HOME/go alla scelta dell’utente impostando la variabile d’ambiente $GOPATH. Infine, abbiamo discusso come Go cerca i pacchetti all’interno di quella struttura di cartelle.

Introdotto in Go 1.11, i moduli di Go mirano a sostituire gli spazi di lavoro di Go e il GOPATH. Mentre si raccomanda di iniziare ad usare i moduli, alcuni ambienti, come quelli aziendali, potrebbero non essere pronti ad usare i moduli.

Il GOPATH è uno degli aspetti più complicati dell’impostazione di Go, ma una volta impostato, di solito possiamo dimenticarcene.

Leave a Reply