Sobes.tech
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.