Sobes.tech
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ă x de tip interfață goală, care implicit este egală cu nil, adică nu conține nici tip, nici valoare.
  • Dar dacă i se atribuie lui x o valoare, de exemplu x = 5, atunci x nu mai este nil, deoarece conține tipul int și valoarea 5.

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.