En Go, une application est organisée en paquets. Un paquet est un ensemble de fichiers sources situés dans le même dossier. Tous les fichiers sources d'un dossier doivent avoir le même nom de paquet en haut du fichier. Par convention, on donne à un paquet le nom du dossier dans lequel il se trouve.
package greeting
Go fournit une vaste bibliothèque standard de paquets que l'on peut utiliser dans son programme grâce au mot-clé import.
Les paquets de la bibliothèque standard s'importent avec leur nom.
package greeting
import "fmt"
On peut importer plusieurs paquets à la fois en les regroupant entre parenthèses.
package greeting
import (
"errors"
"fmt"
)
Les paquets tiers s'importent en utilisant l'URL de l'emplacement du paquet. On peut donner un alias à un paquet au moment de l'import. Cela permet d'éviter les conflits de noms de paquets :
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Un paquet importé est ensuite référencé par son nom ou son 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 détermine si un élément peut être appelé par du code d'autres paquets en fonction de la façon dont il est déclaré.
Pour rendre une fonction, un type, une variable ou une constante visible de l'extérieur (on dit alors qu'elle est exported), le nom doit commencer par une lettre majuscule.
C'est analogue à ce que font d'autres langages de programmation comme Java, qui utilisent des modificateurs d'accès tels que public et 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
}
Il en va de même pour les noms de champs dans les types struct personnalisés : les noms de champs qui commencent par une majuscule sont visibles de l'extérieur, ceux qui commencent par une minuscule ne le sont pas.