Exportierte vs. nicht-exportierte Namen
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 4 von 107.
In Go bestimmt der erste Buchstabe eines Namens dessen Sichtbarkeit. Namen, die mit einem Großbuchstaben beginnen, sind exportiert (zugänglich aus anderen Paketen). Namen, die mit einem Kleinbuchstaben beginnen, sind nicht exportiert (privat für das Paket).
Exportierte Namen — außerhalb des Pakets sichtbar
type User struct {
Name string // Exportiertes Feld
Email string // Exportiertes Feld
}
func CreateUser(name string) User { // Exportierte Funktion
return User{Name: name}
}Nicht exportierte Namen — nur innerhalb des Pakets sichtbar
type secret struct { // Nicht exportiertes Struct
password string // Nicht exportiertes Feld
}
func validate() bool { // Nicht exportierte Funktion
return true
}Gemischt — exportierte Struktur mit einigen nicht exportierten Feldern
type Account struct {
Username string // Exportiert - überall zugänglich
Email string // Exportiert - überall zugänglich
password string // Nicht exportiert - nur innerhalb des Pakets
}Diese Namenskonvention ersetzt Zugriffsmodifikatoren wie public und private, die in anderen Sprachen vorkommen.
// Großbuchstabe = Exportiert (öffentlich)
// Kleinbuchstabe = Nicht exportiert (privat)
func SaveData() {} // Exportiert
func loadData() {} // Nicht exportiertDas Befolgen dieser Konvention ist in Go essenziell. Wenn andere Pakete Ihren Code importieren, können sie nur auf Namen zugreifen, die mit einem Großbuchstaben beginnen.
Aufgabe
MittelKorrigiere alle Namen in product.go, damit sie der Export-Namenskonvention von Go entsprechen. Schreibe den ersten Buchstaben groß bei:
- Dem Struct-Namen:
product→Product - Allen Feldnamen:
name,price,stock - Allen Funktionsnamen:
totalValue,displayInfo - Allen Feldreferenzen innerhalb der Funktionen
Spickzettel
In Go bestimmt der erste Buchstabe eines Namens dessen Sichtbarkeit:
- Großbuchstabe = Exportiert (zugänglich aus anderen Paketen)
- Kleinbuchstabe = Nicht exportiert (privat für das Paket)
Exportierte Namen:
type User struct {
Name string // Exportiertes Feld
Email string // Exportiertes Feld
}
func CreateUser(name string) User { // Exportierte Funktion
return User{Name: name}
}Nicht exportierte Namen:
type secret struct { // Nicht exportierte Struktur
password string // Nicht exportiertes Feld
}
func validate() bool { // Nicht exportierte Funktion
return true
}Gemischte Sichtbarkeit:
type Account struct {
Username string // Exportiert - überall zugänglich
Email string // Exportiert - überall zugänglich
password string // Nicht exportiert - nur innerhalb des Pakets
}Diese Namenskonvention ersetzt Zugriffsmodifikatoren wie public und private, die in anderen Sprachen vorkommen.
Probier es selbst
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der Go OOP
Externe DateienGo Workspace & ModulePackages & ImportsExportierte vs. nicht-exportierte NamenEinführung in OOP in GoStructs als KlassenMethoden für Structs definierenPointer- vs. Value-ReceiverStruct-InitialisierungKonstruktor-FunktionenZusammenfassung – Einfacher Taschenrechner4Interfaces
Einführung in InterfacesImplizite ImplementierungInterface als VertragLeeres Interface (any)Type AssertionType SwitchInterface-KompositionStringer & Error InterfacesRückblick - Formen-Rechner7Kapselung
Exportierte vs. nicht exportierte FelderKapselung auf Paket-EbeneGetter- & Setter-MethodenInformation Hiding in GoZusammenfassung - Studierendendatensätze10Generics (Go 1.18+)
Einführung in GenericsTypparameterType ConstraintsGenerische StructsWorkaround für generische MethodenZusammenfassung – Generische Collection2Vertiefung: Typen & Structs
Basis- & zusammengesetzte TypenBenutzerdefinierte TypdefinitionenStruct TagsAnonyme StructsVerschachtelte StructsZero Values & StandardwerteZusammenfassung - Kontaktbuch5Komposition statt Vererbung
Warum Go keine Vererbung hatGrundlagen des Struct EmbeddingMethod PromotionEinbetten mehrerer StructsEmbedding vs. AggregationShadowing eingebetteter MethodenZusammenfassung – Mitarbeiter-Hierarchie8Fehlerbehandlung & OOP
Das error-InterfaceEigene FehlertypenError Wrapping (fmt.Errorf)Sentinel-Fehlererrors.Is() und errors.As()Panic, Defer und RecoverZusammenfassung – Datei-Parser3Zeiger & Speicher
Zeiger-Grundlagen in GoZeiger auf StructsWertübergabe vs. ReferenzübergabeDie new() FunktionGarbage Collection in GoWiederholung – Linked List Builder6Polymorphismus in Go
Polymorphismus über InterfacesDuck Typing in GoInterface-ErfüllungsregelnPolymorphe CollectionsDependency InjectionZusammenfassung – Payment Processor9Nebenläufigkeit & OOP
Goroutines GrundlagenChannels & KommunikationGepufferte vs. ungepufferte ChannelsSelect-Anweisungsync.Mutex & sync.RWMutexsync.WaitGroupThread-sicheres Struct-DesignZusammenfassung - Worker Pool