Junior — Middle
Care este diferența dintre o interfață goală și valoarea nil în limbajul Go?
sobes.tech AI
Răspuns de la AI
În limbajul Go, interfața goală (interface{}) este un tip care poate conține o valoare de orice tip, inclusiv nil. Cu toate acestea, expresia interfeței goale și valoarea nil sunt lucruri diferite.
var x interface{}— o variabilăxde tip interfață goală, care implicit este egală cunil, adică nu conține nici tip, nici valoare.- Dar dacă i se atribuie lui
xo valoare, de exemplux = 5, atuncixnu mai estenil, deoarece conține tipulintși valoarea5.
Diferența constă în faptul că interfața în Go este reprezentată intern prin doi pointeri: unul către tip și unul către valoare. Interfața este egală cu nil doar dacă ambii pointeri sunt nil.
Exemplu:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, deoarece tipul *int este prezent, chiar dacă valoarea este `nil`
fmt.Println(i == nil) // false
Prin urmare, o interfață goală poate conține o valoare nil a unui anumit tip, dar însăși interfața nu va fi egală cu nil. Acest lucru este un punct important în verificările de nil în Go.