Junior — Middle
Vysvetlite, prečo v Golangu dvojité porovnanie premennej s hodnotou nil môže dať výsledok False pre rôzne premenne s rovnakou hodnotou nil
sobes.tech AI
Odpoveď od AI
V jazyku Go môže mať hodnota nil rôzne vnútorné zobrazenia v závislosti od typu premennej (napríklad ukazovateľ, rozhranie, rez, mapa atď.). Pri porovnávaní rozhraní s nil je dôležité pochopiť, že rozhranie sa skladá zo dvoch častí: typu a hodnoty.
Ak majú dve rozhrania rovnakú hodnotu nil, ale rôzne typy alebo vnútorné zobrazenia, porovnanie s nil môže vrátiť false.
Príklad:
var p *int = nil
var i interface{} = p
fmt.Println(p == nil) // true
fmt.Println(i == nil) // false, pretože i obsahuje typ *int a hodnotu nil
Tu i nie je rovné nil, pretože vo vnútri rozhrania je uložený typ *int a hodnota nil, nie samotné rozhranie s prázdnym typom a hodnotou.
Preto môže dvojité porovnanie premennej s nil dať odlišné výsledky, ak majú premenne rôzne typy alebo vnútorné zobrazenia, aj keď na vonkajšej úrovni vyzerajú ako nil.