Sobes.tech
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.