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 (aus anderen Paketen zugänglich). Namen, die mit einem Kleinbuchstaben beginnen, sind nicht exportiert (auf das Paket beschränkt).
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 { // Unexportierte Struct
password string // Unexportiertes Feld
}
func validate() bool { // Unexportierte 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 // Unexportiert - nur innerhalb des Pakets
}Diese Namenskonvention ersetzt Zugriffsmodifikatoren wie public und private, die in anderen Sprachen vorkommen.
// Großbuchstabe = Exportiert (öffentlich)
// Kleinbuchstabe = Unexportiert (privat)
func SaveData() {} // Exportiert
func loadData() {} // UnexportiertDiese Konvention ist in Go unerlässlich. Wenn andere Pakete deinen Code importieren, können sie nur auf Namen zugreifen, die mit einem Großbuchstaben beginnen.
Aufgabe
MittelÄndere alle Namen in product.go, damit sie der exportierten Namenskonvention von Go entsprechen. Schreibe den ersten Buchstaben groß bei:
- Dem Namen der Struktur:
product→Product - Allen Feldnamen:
name,price,stock - Allen Funktionsnamen:
totalValue,displayInfo - Allen Feldreferenzen innerhalb der Funktionen
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 OOP in Go
Externe DateienGo-Workspace & ModulePackages & ImportsExportierte vs. nicht exportierte NamenEinführung in OOP mit GoStructs als KlassenMethoden für Structs definierenPointer- vs. Value-ReceiverStruct-InitialisierungKonstruktorfunktionenRückblick – Einfacher Taschenrechner4Schnittstellen
Einführung in SchnittstellenImplizite ImplementierungSchnittstelle als VertragLeere Schnittstelle (any)TypzusicherungTypwechselZusammensetzung von SchnittstellenStringer- und Error-SchnittstellenRückblick – Formenrechner7Kapselung
Exportierte vs. nicht exportierte FelderKapselung auf PaketebeneGetter- und Setter-MethodenInformationsverbergung in GoRückblick – Studierendendatensätze10Generics (Go 1.18+)
Einführung in GenericsTypparameterTypbeschränkungenGenerische StrukturenWorkaround für generische MethodenZusammenfassung – Generische Sammlung2Typen & Structs im Detail
Grundlegende & zusammengesetzte TypenBenutzerdefinierte TypdefinitionenStruct-TagsAnonyme StructsVerschachtelte StructsNullwerte & StandardwerteRückblick – Kontaktbuch5Komposition statt Vererbung
Warum Go keine Vererbung hatGrundlagen der Struct-EinbettungMethoden-PromotionMehrere Structs einbettenEinbettung vs. AggregationVerbergen eingebetteter MethodenRückblick – Mitarbeiterhierarchie8Fehlerbehandlung & OOP
Das Error-InterfaceBenutzerdefinierte FehlertypenError-Wrapping (fmt.Errorf)Sentinel-Fehlererrors.Is() und errors.As()Panic, Defer und RecoverRückblick – Dateiparser3Zeiger & Speicher
Grundlagen von Zeigern in GoZeiger auf StructsÜbergabe per Wert vs. ReferenzDie Funktion new()Garbage Collection in GoRückblick – Verkettete Liste erstellen6Polymorphismus in Go
Polymorphismus über InterfacesDuck-Typing in GoRegeln zur Interface-ErfüllungPolymorphe SammlungenDependency InjectionZusammenfassung – Zahlungsprozessor9Konkurrenz & OOP
Grundlagen der GoroutinesChannels & KommunikationGepufferte vs. ungepufferte ChannelsSelect-Anweisungsync.Mutex & sync.RWMutexsync.WaitGroupThread-sicheres Struct-DesignRückblick – Worker PoolÜbe selbstständig: Online-Go-Compiler