In Go un'applicazione è organizzata in package. Un package è un insieme di file sorgente che si trovano nella stessa cartella. Tutti i file sorgente in una cartella devono avere lo stesso nome di package all'inizio del file. Per convenzione, i package prendono il nome della cartella in cui si trovano.
package greeting
Go fornisce un'ampia libreria standard di package che puoi usare nel tuo programma con la parola chiave import.
I package della libreria standard si importano usando il loro nome.
package greeting
import "fmt"
Si possono importare più package contemporaneamente racchiudendoli tra parentesi.
package greeting
import (
"errors"
"fmt"
)
I package di terze parti si importano usando l'URL della loro posizione. Quando si importa un package, gli si può assegnare un alias. Questo può servire a evitare conflitti tra i nomi dei package:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Un package importato viene poi richiamato con il suo nome o con il suo alias:
// using the internal errors package
errors.New("Connection not established")
// using the errors package located at github.com/pkg/errors by alias
errs.New("Connection not established")
Go stabilisce se un elemento può essere richiamato dal codice di altri package in base a come è dichiarato.
Per rendere una funzione, un tipo, una variabile o una costante visibile dall'esterno (cioè exported), il nome deve iniziare con una lettera maiuscola.
È analogo a come funzionano altri linguaggi di programmazione come Java, che usano modificatori di accesso come public e private.
package greeting
// Hello is a public function (callable from other packages).
func Hello(name string) string {
return "Hello " + name
}
// hello is a private function (not callable from other packages).
func hello(name string) string {
return "Hello " + name
}
Lo stesso vale per i nomi dei campi nei tipi struct personalizzati: i nomi dei campi che iniziano con una lettera maiuscola sono visibili dall'esterno, quelli che iniziano con una lettera minuscola no.