Sobes.tech
Junior — Middle

Aký je rozdiel medzi prázdnym rozhraním a hodnotou nil v jazyku Go?

sobes.tech AI

Odpoveď od AI

V jazyku Go je prázdne rozhranie (interface{}) typ, ktorý môže obsahovať hodnotu akéhokoľvek typu, vrátane nil. Avšak, výraz prázdneho rozhrania a hodnota nil sú dve odlišné veci.

  • var x interface{} — premenná x typu prázdne rozhranie, ktorá je predvolená na nil, teda neobsahuje ani typ, ani hodnotu.
  • Ak jej však priradíte nejakú hodnotu, napríklad x = 5, potom x už nie je nil, pretože obsahuje typ int a hodnotu 5.

Rozdiel spočíva v tom, že rozhranie v Go je interné reprezentované dvomi ukazovateľmi: na typ a na hodnotu. Rozhranie je rovné nil iba vtedy, ak sú oba ukazovatele nil.

Príklad:

var i interface{} // i == nil
var p *int = nil

 i = p // i != nil, pretože typ *int je prítomný, aj keď hodnota je `nil`

fmt.Println(i == nil) // false

Preto môže prázdne rozhranie obsahovať hodnotu nil konkrétneho typu, ale samo rozhranie nebude rovné nil. Toto je dôležitý bod pri kontrolách na nil v Go.