Structs definieren und verwenden
Struct-Literale, Feldzugriff und Embedding
Structs definieren und verwenden ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Struct?
Ein Struct fasst zusammengehörige Felder unterschiedlicher Typen unter einem benannten Typ zusammen. Es ist Gos wichtigster Mechanismus zum Definieren eigener Datenstrukturen — ähnlich wie eine Klasse, aber ohne Vererbung.
Struct-Deklaration
Definieren Sie einen Struct-Typ mit dem Schlüsselwort type:
package main
import "fmt"
type Person struct {
Name string
Age int
City string
}
func main() {
p := Person{Name: "Alice", Age: 30, City: "London"}
fmt.Println(p)
}Struct-Literale
Zwei Varianten: benannte Felder (bevorzugt) und positionale Felder (von der Reihenfolge abhängig und fehleranfällig):
package main
type Point struct{ X, Y int }
func main() {
p1 := Point{X: 1, Y: 2} // named — preferred
p2 := Point{3, 4} // positional — avoid in non-test code
_ = p1; _ = p2
}Auf Felder zugreifen
Verwenden Sie die Punktnotation, um Felder zu lesen und zu schreiben:
package main
import "fmt"
type Car struct{ Brand string; Speed int }
func main() {
c := Car{Brand: "Tesla", Speed: 200}
fmt.Println(c.Brand) // Tesla
c.Speed = 250
fmt.Println(c.Speed) // 250
}Nullwert eines Structs
Beim Nullwert eines Structs sind alle Felder auf ihren jeweiligen Nullwert gesetzt. Sie können ihn ohne Initialisierung sicher verwenden:
package main
import "fmt"
type Config struct{ Debug bool; Port int; Host string }
func main() {
var cfg Config
fmt.Println(cfg) // {false 0 }
cfg.Port = 8080
fmt.Println(cfg) // {false 8080 }
}Structs vergleichen
Structs können mit == verglichen werden, wenn alle ihre Felder vergleichbar sind:
package main
import "fmt"
type Point struct{ X, Y int }
func main() {
a := Point{1, 2}
b := Point{1, 2}
c := Point{3, 4}
fmt.Println(a == b) // true
fmt.Println(a == c) // false
}Structs sind Werttypen
Beim Zuweisen eines Structs werden alle seine Felder kopiert. Änderungen an der Kopie wirken sich nicht auf das Original aus:
package main
import "fmt"
type Rect struct{ W, H int }
func main() {
r1 := Rect{10, 20}
r2 := r1
r2.W = 99
fmt.Println(r1) // {10 20}
fmt.Println(r2) // {99 20}
}Verschachtelte Structs
Ein Struct-Feld kann selbst ein Struct sein:
package main
import "fmt"
type Address struct{ City, Country string }
type Employee struct {
Name string
Age int
Address Address
}
func main() {
e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
fmt.Println(e.Address.City) // Berlin
}Exportierte und nicht exportierte Felder
Felder, die mit einem Großbuchstaben beginnen, sind exportiert (öffentlich). Felder mit einem Kleinbuchstaben sind nicht exportiert (paketintern):
package main
type config struct {
host string // unexported
Port int // exported
}
func main() {
c := config{host: "localhost", Port: 8080}
_ = c
}Struct-Tags
Struct-Tags stellen Metadaten bereit (zum Beispiel für die JSON-Kodierung). Sie sind String-Literale hinter dem Feldtyp:
package main
type User struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email,omitempty"`
}
func main() { _ = User{} }Kurze Überprüfung
Was ist der Nullwert eines bool-Felds in einem Struct?
Zusammenfassung: Structs
Die wichtigsten Erkenntnisse:
- Structs fassen zusammengehörige Felder zu einem benannten Typ zusammen
- Verwenden Sie Literale mit benannten Feldern — vermeiden Sie positionale Literale
- Structs sind Werttypen — bei Zuweisungen werden sie kopiert
- Felder, die mit einem Großbuchstaben beginnen, sind exportiert
- Struct-Tags fügen Metadaten für Bibliotheken wie encoding/json hinzu
Übungsaufgabe
Definieren Sie ein Product-Struct mit den Feldern Name string, Price float64 und InStock bool. Erstellen Sie zwei Instanzen, vergleichen Sie sie mit == und geben Sie das Ergebnis aus.
Häufig gestellte Fragen
Ist die Lektion „Structs definieren und verwenden“ kostenlos?
Ja — der vollständige Text von „Structs definieren und verwenden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Structs definieren und verwenden“?
Struct-Literale, Feldzugriff und Embedding Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Structs definieren und verwenden“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Structs definieren und verwenden
- Methoden auf Structs
- Konstruktor-Patterns
- Anonyme Structs und Komposition