Junior — Middle
Mi a különbség a üres interfész kifejezés és a nil érték között a Go nyelvben?
sobes.tech MI
Válasz az MI-től
A Go nyelvben a üres interfész (interface{}) egy olyan típus, amely bármilyen típusú értéket tartalmazhat, beleértve a nil-t is. Azonban az üres interfész kifejezése és a nil érték két külön dolog.
var x interface{}— egyxnevű változó, amely az üres interfész típusába tartozik, és alapértelmezés szerintnil, azaz nem tartalmaz sem típus, sem érték adatokat.- De ha értéket rendelünk hozzá, például
x = 5, akkorxmár nemnil, mert tartalmazza azinttípusú értéket és a5-öt.
A különbség abban rejlik, hogy a Go-ban az interfész belsőleg két mutatóval van reprezentálva: egy a típusra és egy az értékre. Az interfész csak akkor egyenlő a nil-lal, ha mindkét mutató nil.
Példa:
var i interface{} // i == nil
var p *int = nil
i = p // i nem `nil`, mert a típus *int jelen van, még akkor is, ha az érték `nil`
fmt.Println(i == nil) // hamis
Tehát az üres interfész tartalmazhat nil értéket egy adott típusból, de maga az interfész nem lesz nil. Ez egy fontos pont a nil ellenőrzéseknél Go-ban.