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áxtypu prázdne rozhranie, ktorá je predvolená nanil, teda neobsahuje ani typ, ani hodnotu.- Ak jej však priradíte nejakú hodnotu, napríklad
x = 5, potomxuž nie jenil, pretože obsahuje typinta hodnotu5.
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.