Junior — Middle
Czym różni się wyrażenie pustego interfejsu od wartości nil w języku Go?
sobes.tech AI
Odpowiedź od AI
W języku Go pusta interfejs (interface{}) to typ, który może zawierać wartość dowolnego typu, w tym nil. Jednak wyrażenie pustego interfejsu i wartość nil to dwie różne rzeczy.
var x interface{}— zmiennaxtypu pusty interfejs, która domyślnie jest równanil, czyli nie zawiera ani typu, ani wartości.- Ale jeśli przypiszemy
xjakąś wartość, na przykładx = 5, toxnie jest jużnil, ponieważ zawiera typinti wartość5.
Różnica polega na tym, że interfejs w Go jest reprezentowany wewnętrznie przez dwa wskaźniki: na typ i na wartość. Interfejs jest równy nil tylko wtedy, gdy oba wskaźniki są nil.
Przykład:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, ponieważ typ *int jest obecny, choć wartość jest `nil`
fmt.Println(i == nil) // false
W związku z tym, pusty interfejs może zawierać wartość nil konkretnego typu, ale sam interfejs nie będzie równy nil. To ważny punkt przy sprawdzaniu nil w Go.