Przejdź do głównej treści
eLearner.app
Moduł 1 · Lekcja 2 z 52/50 w kursie~10 min
Lekcje modułu (2/5)

Zero Value i konwersje typów

W Go każda zmienna zadeklarowana bez jawnej wartości otrzymuje a wartość zerowa: „wartość neutralna” swojego typu. To ogromna różnica z JavaScript, gdzie let x; tworzy undefined lub C, gdzie kończysz ze śmieciową pamięcią. Żadnego undefined, żadnego UB: tylko zero.

Tabela wartości zerowych

KategoriaWpiszWartość zerowa
NumeryczneKODEF0, KODEF1, KODEF2, KODEF3, KODEF4, ...KODEF5
Wartość logicznaKODEF6KODEF7
CiągKODEF8"" (pusty ciąg znaków)
WskaźnikKODEF10KODEF11
Kawałek / Mapa / KanałKODEF12, KODEF13, KODEF14KODEF15
Funkcja / InterfejsKODEF16, KODEF17KODEF18
StrukturaKODEF19wszystkie pola mają wartość zerową
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Konwersje są ZAWSZE jawne

W przeciwieństwie do C, Pythona czy JS, Go nie promuje automatycznie jednego typ numeryczny na inny: musisz wpisać type(value).

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Dotyczy to nawet „kompatybilnych” typów, takich jak int i int64: an zawsze wymagana jest jawna konwersja.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Konwersja między liczbami: uważaj na obcięcie

Przechodząc od float64 do int obcina do zera, tak nie jest okrągłe:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Konwersja ciągu ↔ liczby

string(65) NIE daje "65": daje "A" (runa z kodem punkt 65). Dla ciągu → liczby i odwrotnie potrzebny jest kod strconv pakiet:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Omówimy to szczegółowo w module Stdlib.

Twoja kolej

Ćwiczenie#go.m1.l2.e1
Próby: 0Ładowanie...

Zadeklaruj licznik zmiennych typu int bez jego inicjowania i wydrukuj. Oczekiwano: 0.

Ładowanie edytora...
Pokaż wskazówkę

Bez inicjatora zmienna przyjmuje wartość zerową typu.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#go.m1.l2.e2
Próby: 0Ładowanie...

Biorąc pod uwagę liczbę całkowitą n=10, zamień n na float64 i podziel przez 4. Wydrukuj wynik (oczekiwane 2,5).

Ładowanie edytora...
Pokaż wskazówkę

Bez jawnej konwersji `n / 4` jest dzieleniem liczb całkowitych dającym 2.

Rozwiązanie dostępne po 3 próbach

Quiz#go.m1.l2.e3
Gotowe

Co wypisuje ten kod?

Go
f := 3.7
fmt.Println(int(f))
Opcje odpowiedzi

Podsumowanie

  • Każdy typ ma stałą wartość zerową: brak undefined, brak UB.
  • Kawałek/mapa/chan/funkcja/interfejs/wskaźnik mają wartość zerową nil.
  • Konwersje numeryczne są zawsze jawne w przypadku type(value).
  • int(float) obcina w kierunku zera; do zaokrąglenia użyj math.Round.
  • Dla ciągu ↔ liczby użyj pakietu strconv (NIE bezpośredniego rzutowania).