In Go ist der Sichtbereich von Variablen, Funktionen, Strukturen und Methoden eng mit der Großschreibung des ersten Buchstabens verbunden:
Datei example.go:
package mypkg var ExportedVar int // verfügbar in anderen Paketen var unexportedVar int // nur in mypkg
Beim Import eines Pakets kann nur auf exportierte Objekte zugegriffen werden.
Best Practice:
Frage: "Kann man eine Struktur mit nicht exportierten Feldern exportieren? Was passiert, wenn man versucht, solche Felder in einem anderen Paket zu verwenden?"
Antwort: Nur die Struktur mit einem Großbuchstaben wird exportiert. Alle Felder der Struktur, die mit einem Kleinbuchstaben beginnen, sind außerhalb des Pakets nicht zugänglich. Der Versuch, auf solche Felder von außen zuzugreifen, wird mit einem Fehler kompiliert.
Beispiel:
// package user type User struct { Name string // Exportiertes Feld age int // Nicht zugänglich außerhalb des Pakets user }
In einem anderen Paket:
u := user.User{Name: "Ivan"} u.age = 42 // Kompilierungsfehler: age is not accessible
Geschichte
Datenverlust beim Marshaling von JSON: In der REST-API wurde die Struktur exportiert, aber die Felder wurden nicht exportiert (mit Kleinbuchstaben). Als Ergebnis wurden diese Felder beim Marshal nicht in JSON einbezogen und API-Nutzer erhielten nicht die benötigten Informationen.
Geschichte
Zugang zu benötigten Funktionen funktioniert nicht: Das Team hat nützliche Hilfsfunktionen in ein separates Paket ausgelagert, dabei aber vergessen, die Namen mit einem Großbuchstaben zu versehen. Die Funktionen blieben nicht verfügbar, und es musste eine Schnittstelle neu gestaltet werden.
Geschichte
Namenskonflikt bei der Codegenerierung: Bei der Codegenerierung in einem Paket wurden Variablen mit identischen Namen, die sich nur in der Großschreibung unterscheiden, verwendet. Eines der Skripte hat versehentlich eine exportierte Konstante in einen Kleinbuchstaben umbenannt. Infolgedessen verlor die Anwendung den globalen Zugriff auf diese Konstante, und ein Teil der Funktionalität wurde nicht mehr verfügbar.