Junior — Middle
Mi a különbség a Go nyelvben az üres interfész és a nil értékű interfész között?
sobes.tech MI
Válasz az MI-től
Go nyelvben az üres interfész interface{} olyan interfész, amely nem tartalmaz metódusokat, és bármilyen típusú értéket tárolhat. Azonban, amikor egy interfész típusú változó nil értéket tartalmaz, fontos megérteni, pontosan mit jelent a nil.
- Üres interfész, érték nélkül: egy olyan interfész típusú változó, amely nem mutat semmilyen értékre, nil-nek számít.
- Nil értékkel rendelkező interfész: ha az interfész egy adott típust tartalmaz, de ennek a típusnak az értéke nil, akkor az interfész maga nem egyenlő a nil-lal, mivel információt tartalmaz a típusról.
Példa:
var i interface{} // i == nil
var p *int = nil // p == nil
i = p // i != nil, mert tartalmazza a *int típust, de az értéke nil
fmt.Println(i == nil) // false
fmt.Println(p == nil) // true
Fontos figyelembe venni ezt a nil ellenőrzésekor, hogy elkerüljük a váratlan hibákat.