Sobes.tech
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{} — zmienna x typu pusty interfejs, która domyślnie jest równa nil, czyli nie zawiera ani typu, ani wartości.
  • Ale jeśli przypiszemy x jakąś wartość, na przykład x = 5, to x nie jest już nil, ponieważ zawiera typ int i 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.