Junior — Middle
Vysvětlete, proč v Golangu může dvojí porovnání proměnné s hodnotou nil vrátit False pro různé proměnné se stejnou hodnotou nil
sobes.tech AI
Odpověď od AI
V jazyce Go může mít hodnota nil různé vnitřní reprezentace v závislosti na typu proměnné (například ukazatel, rozhraní, řez, mapa atd.). Při porovnávání rozhraní s nil je důležité pochopit, že rozhraní se skládá ze dvou částí: typu a hodnoty.
Pokud mají dvě proměnné rozhraní stejnou hodnotu nil, ale různé typy nebo vnitřní reprezentace, porovnání s nil může vrátit false.
Příklad:
var p *int = nil
var i interface{} = p
fmt.Println(p == nil) // true
fmt.Println(i == nil) // false, protože i obsahuje typ *int a hodnotu nil
Zde i není rovno nil, protože uvnitř rozhraní je uložen typ *int a hodnota nil, nikoli samotné rozhraní s prázdným typem a hodnotou.
Proto může dvojí porovnání proměnné s nil dát odlišné výsledky, pokud proměnné mají různé typy nebo vnitřní reprezentace, i když na povrchu vypadají jako nil.