Direkt zum Hauptinhalt springen
eLearner.app
Modul 1 · Lektion 2 von 52/50 im Kurs~10 min
Lektionen des Moduls (2/5)

Zero Value und Typkonvertierungen

In Go erhält jede ohne expliziten Wert deklarierte Variable einen Nullwert: der „neutrale Wert“ seines Typs. Es ist ein großer Unterschied aus JavaScript, wo let x; undefined erzeugt, oder C, wo Sie enden mit Müllspeicher. Kein undefined, kein UB: nur Null.

Die Nullwerttabelle

KategorieGeben Sieein Nullwert
Numerischint, int64, float32, float64, uint, ...0
Boolescher Wertboolfalse
Zeichenfolgestring"" (leerer String)
Zeigerint640int641
Slice / Karte / Kanalint642, int643, int644int645
Funktion / Schnittstelleint646, int647int648
Strukturint649alle Felder auf ihrem Nullwert
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!)

Konvertierungen sind IMMER explizit

Im Gegensatz zu C, Python oder JS **stuft Go eines nicht automatisch hoch numerischen Typ in einen anderen umwandeln: Sie müssen type(value) schreiben.

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

Dies gilt sogar für „kompatible“ Typen wie int und int64: an Eine explizite Konvertierung ist immer erforderlich.

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

Konvertierung zwischen Zahlen: Achten Sie auf Kürzungen

Der Übergang von float64 zu int schneidet gegen Null, ist jedoch nicht der Fall rund:

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

String ↔ Zahlenkonvertierung

string(65) gibt NICHT "65": Es gibt "A" (die Rune mit Code). Punkt 65). Für String → Zahl und umgekehrt benötigen Sie den strconv Paket:

Go
import "strconv"

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

Wir werden es ausführlich im Stdlib-Modul behandeln.

Du bist dran

Übung#go.m1.l2.e1
Versuche: 0Wird geladen…

Deklarieren Sie einen Variablenzähler vom Typ int, ohne ihn zu initialisieren, und drucken Sie ihn aus. Erwartet: 0.

Editor wird geladen…
Hinweis anzeigen

Ohne Initialisierer nimmt die Variable den Nullwert des Typs an.

Lösung nach 3 Versuchen verfügbar

Übung#go.m1.l2.e2
Versuche: 0Wird geladen…

Konvertieren Sie bei gegebener Ganzzahl n=10 n in float64 und dividieren Sie durch 4. Drucken Sie das Ergebnis aus (erwartet 2,5).

Editor wird geladen…
Hinweis anzeigen

Ohne die explizite Konvertierung ist `n / 4` eine ganzzahlige Division, die 2 ergibt.

Lösung nach 3 Versuchen verfügbar

Quiz#go.m1.l2.e3
Bereit

Was gibt dieser Code aus?

Go
f := 3.7
fmt.Println(int(f))
Antwortoptionen

Zusammenfassung

  • Jeder Typ hat einen konsistenten Nullwert: kein undefined, kein UB. – Slice/map/chan/func/interface/pointer haben den Nullwert nil.
  • Numerische Konvertierungen sind mit type(value) immer explizit.
  • int(float) schneidet gegen Null; Zum Runden verwenden Sie math.Round.
  • Für Zeichenfolge ↔ Zahl verwenden Sie das strconv-Paket (KEINE direkte Umwandlung).