Menu
Coddy logo textTech

Zero Values & Standardwerte

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 17 von 107.

In Go hat jede Variable einen Nullwert (Zero Value) — den Standardwert, der zugewiesen wird, wenn Sie eine Variable ohne explizite Initialisierung deklarieren. Das Verständnis von Nullwerten ist für die Arbeit mit Structs unerlässlich, da nicht initialisierte Felder automatisch diese Standardwerte erhalten.

Jeder Typ hat seinen eigenen Nullwert:

TypNullwert
int, float640
string"" (leerer String)
boolfalse
pointer, slice, mapnil

Wenn Sie ein Struct erstellen, erhält jedes Feld, das Sie nicht explizit setzen, seinen Nullwert (Zero Value).

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (leerer String)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Dies gilt auch für die teilweise Initialisierung. Nur die von Ihnen angegebenen Felder erhalten benutzerdefinierte Werte.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Nullwerte machen Structs ohne explizite Initialisierung sofort einsatzbereit. Seien Sie jedoch vorsichtig bei Referenztypen wie Slices und Maps – ihr Nullwert ist nil, was zu Laufzeit-Panics führen kann, wenn Sie versuchen, sie ohne Initialisierung zu verwenden.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Spielerprofil-System erstellen, das demonstriert, wie Nullwerte (Zero Values) in Go funktionieren. Sie werden ein Spielprofil erstellen, bei dem einige Felder explizit gesetzt werden, während andere auf ihren Standard-Nullwerten basieren.

Sie werden Ihren Code auf zwei Dateien verteilen:

  • player.go: Definieren Sie ein Player-Struct mit den folgenden Feldern: Username (string), Level (int), Score (int), IsPremium (bool) und GuildName (string). Erstellen Sie außerdem eine DisplayProfile-Methode, die einen formatierten String zurückgibt, der alle Informationen des Spielers anzeigt.
  • main.go: Lesen Sie einen Benutzernamen aus der Eingabe und erstellen Sie einen Player mit teilweiser Initialisierung – setzen Sie nur das Feld Username. Zeigen Sie dann das vollständige Profil an, um zu sehen, wie Go die nicht gesetzten Felder mit ihren Nullwerten füllt.

Die folgende Eingabe wird bereitgestellt:

  • Zeile 1: Der Benutzername des Spielers

Ihre DisplayProfile-Methode sollte einen String in genau diesem Format zurückgeben:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

Wenn der Benutzername beispielsweise ShadowKnight lautet, sollte Ihre Ausgabe den Benutzernamen zusammen mit allen Nullwerten für die nicht initialisierten Felder anzeigen:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

Beachten Sie, dass das Feld Guild nach dem Doppelpunkt nichts anzeigt – das ist der Nullwert für einen leeren String. Diese Herausforderung hilft Ihnen zu sehen, was Go jedem Typ genau zuweist, wenn Sie keinen expliziten Wert angeben.

Spickzettel

In Go hat jede Variable einen Nullwert (Zero Value) — den Standardwert, der zugewiesen wird, wenn Sie eine Variable ohne explizite Initialisierung deklarieren.

Jeder Typ hat seinen eigenen Nullwert:

TypNullwert
int, float640
string"" (leerer String)
boolfalse
pointer, slice, mapnil

Wenn Sie ein Struct erstellen, erhält jedes Feld, das Sie nicht explizit setzen, seinen Nullwert:

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (leerer String)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Teilweise Initialisierung — nur angegebene Felder erhalten benutzerdefinierte Werte:

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

Nullwerte machen Structs sofort einsatzbereit, ohne dass eine explizite Initialisierung erforderlich ist. Seien Sie vorsichtig bei Referenztypen wie Slices und Maps — ihr Nullwert ist nil, was zu Laufzeit-Panics führen kann, wenn sie ohne Initialisierung verwendet werden.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Lies den `username` aus der Eingabe
	var username string
	fmt.Scanln(&username)

	// TODO: Erstelle einen `Player` mittels partieller Initialisierung
	// Setze nur das Feld `Username`, lass andere Felder Nullwerte verwenden

	// TODO: Zeige das Profil des Spielers mit der Methode `DisplayProfile` an
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung