In Go wird eine Anwendung in Pakete organisiert. Ein Paket ist eine Sammlung von Quelldateien, die sich im selben Ordner befinden. Alle Quelldateien in einem Ordner müssen oben in der Datei denselben Paketnamen haben. Üblicherweise werden Pakete genauso benannt wie der Ordner, in dem sie liegen.
package greeting
Go bietet eine umfangreiche Standardbibliothek mit Paketen, die du in deinem Programm mit dem Schlüsselwort import verwenden kannst.
Pakete der Standardbibliothek werden über ihren Namen importiert.
package greeting
import "fmt"
Mehrere Pakete können gleichzeitig importiert werden, indem du sie in Klammern setzt.
package greeting
import (
"errors"
"fmt"
)
Pakete von Drittanbietern werden über die URL des Speicherorts des Pakets importiert. Beim Importieren kann einem Paket ein Alias gegeben werden. Das kann verwendet werden, um Namenskonflikte zwischen Paketen zu vermeiden:
package greeting
import (
"errors"
errs "github.com/pkg/errors"
)
Ein importiertes Paket wird dann über den Paketnamen oder den Alias angesprochen:
// 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 entscheidet anhand der Deklaration, ob ein Element von Code in anderen Paketen aufgerufen werden kann.
Damit eine Funktion, ein Typ, eine Variable oder eine Konstante von außen sichtbar ist (bekannt als exported), muss der Name mit einem Großbuchstaben beginnen.
Das ist analog dazu, wie andere Programmiersprachen wie Java Zugriffsmodifikatoren wie public und private verwenden.
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
}
Dasselbe gilt für Feldnamen in benutzerdefinierten struct-Typen: Feldnamen, die mit einem Großbuchstaben beginnen, sind von außen sichtbar, die mit einem Kleinbuchstaben nicht.