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
| Kategorie | Geben Sie | ein Nullwert |
|---|---|---|
| Numerisch | int, int64, float32, float64, uint, ... | 0 |
| Boolescher Wert | bool | false |
| Zeichenfolge | string | "" (leerer String) |
| Zeiger | int640 | int641 |
| Slice / Karte / Kanal | int642, int643, int644 | int645 |
| Funktion / Schnittstelle | int646, int647 | int648 |
| Struktur | int649 | alle Felder auf ihrem Nullwert |
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.
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.
var a int = 10
var b int64 = int64(a) // obbligatorioKonvertierung zwischen Zahlen: Achten Sie auf Kürzungen
Der Übergang von float64 zu int schneidet gegen Null, ist jedoch nicht der Fall
rund:
f := 3.9
i := int(f) // 3, non 4
n := int(-3.9) // -3, non -4String ↔ 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:
import "strconv"
s := strconv.Itoa(42) // "42"
n, err := strconv.Atoi("42") // 42, nilWir werden es ausführlich im Stdlib-Modul behandeln.
Du bist dran
Deklarieren Sie einen Variablenzähler vom Typ int, ohne ihn zu initialisieren, und drucken Sie ihn aus. Erwartet: 0.
Hinweis anzeigen
Ohne Initialisierer nimmt die Variable den Nullwert des Typs an.
Lösung nach 3 Versuchen verfügbar
Konvertieren Sie bei gegebener Ganzzahl n=10 n in float64 und dividieren Sie durch 4. Drucken Sie das Ergebnis aus (erwartet 2,5).
Hinweis anzeigen
Ohne die explizite Konvertierung ist `n / 4` eine ganzzahlige Division, die 2 ergibt.
Lösung nach 3 Versuchen verfügbar
Was gibt dieser Code aus?
f := 3.7
fmt.Println(int(f))Zusammenfassung
- Jeder Typ hat einen konsistenten Nullwert: kein
undefined, kein UB. – Slice/map/chan/func/interface/pointer haben den Nullwertnil. - Numerische Konvertierungen sind mit
type(value)immer explizit. int(float)schneidet gegen Null; Zum Runden verwenden Siemath.Round.- Für Zeichenfolge ↔ Zahl verwenden Sie das
strconv-Paket (KEINE direkte Umwandlung).