Menu
Coddy logo textTech

Wartości zerowe i domyślne

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 17 z 107.

W Go każda zmienna ma wartość zerową: domyślną wartość przypisywaną przy deklarowaniu zmiennej bez jawnej inicjalizacji. Zrozumienie wartości zerowych jest niezbędne podczas pracy ze strukturami, ponieważ niezainicjalizowane pola automatycznie otrzymują te wartości domyślne.

Każdy typ ma własną wartość zerową:

TypWartość zerowa
int, float640
string"" (pusty ciąg znaków)
boolfalse
pointer, slice, mapnil

Gdy tworzysz strukturę, każde pole, którego wartości nie ustawisz jawnie, otrzymuje wartość zerową.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (pusty ciąg znaków)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Dotyczy to również częściowej inicjalizacji. Wartości niestandardowe otrzymują tylko określone przez Ciebie pola.

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

Wartości zerowe sprawiają, że struktur można od razu używać bez jawnej inicjalizacji. Zachowaj jednak ostrożność w przypadku typów referencyjnych, takich jak wycinki i mapy. Ich wartością zerową jest nil, co może powodować paniki w czasie działania programu, jeśli spróbujesz ich użyć bez inicjalizacji.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system profili graczy, który pokazuje, jak działają wartości zerowe w Go. Utworzysz profil gracza, w którym niektóre pola zostaną jawnie ustawione, a pozostałe będą korzystać z domyślnych wartości zerowych.

Rozmieścisz kod w dwóch plikach:

  • player.go: Zdefiniuj strukturę Player z następującymi polami: Username (string), Level (int), Score (int), IsPremium (bool) i GuildName (string). Utwórz też metodę DisplayProfile, która zwraca sformatowany ciąg znaków zawierający wszystkie informacje o graczu.
  • main.go: Odczytaj nazwę użytkownika z wejścia i utwórz gracza, inicjalizując tylko część pól: ustaw wyłącznie pole Username. Następnie wyświetl pełny profil, aby zobaczyć, jak Go uzupełnia nieustawione pola ich wartościami zerowymi.

Dane wejściowe będą miały następującą postać:

  • Wiersz 1: Nazwa użytkownika gracza

Metoda DisplayProfile powinna zwracać ciąg znaków w dokładnie takim formacie:

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

Na przykład, jeśli nazwa użytkownika to ShadowKnight, wynik powinien zawierać nazwę użytkownika oraz wszystkie wartości zerowe dla niezainicjalizowanych pól:

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

Zwróć uwagę, że pole Guild nie wyświetla niczego po dwukropku: to wartość zerowa będąca pustym ciągiem znaków. To wyzwanie pozwoli ci dokładnie zobaczyć, jaką wartość Go przypisuje każdemu typowi, gdy nie podasz jej jawnie.

Spróbuj swoich sił

package main

import (
	"fmt"
)

func main() {
	// Odczytaj nazwę użytkownika z wejścia
	var username string
	fmt.Scanln(&username)

	// TODO: Utwórz Player, używając częściowej inicjalizacji
	// Ustaw tylko pole Username, a pozostałe pola pozostaw z wartościami zerowymi

	// TODO: Wyświetl profil gracza za pomocą metody DisplayProfile
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online