Junior — Middle
V čem se liší výraz prázdného rozhraní od hodnoty nil v jazyce Go?
sobes.tech AI
Odpověď od AI
V jazyce Go je prázné rozhraní (interface{}) typ, který může obsahovat hodnotu jakéhokoliv typu, včetně nil. Nicméně, výraz prázdného rozhraní a hodnota nil jsou dvě odlišné věci.
var x interface{}— proměnnáxtypu prázdné rozhraní, která je ve výchozím nastavení rovnanil, tedy neobsahuje ani typ, ani hodnotu.- Pokud však
xpřiřadíte nějakou hodnotu, napříkladx = 5, pakxjiž nenínil, protože obsahuje typinta hodnotu5.
Rozdíl spočívá v tom, že rozhraní v Go je interně reprezentováno dvěma ukazateli: na typ a na hodnotu. Rozhraní je rovno nil pouze tehdy, pokud jsou oba ukazatele nil.
Příklad:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, protože typ *int je přítomen, i když hodnota je `nil`
fmt.Println(i == nil) // false
Proto může prázdné rozhraní obsahovat hodnotu nil konkrétního typu, ale samo rozhraní nebude rovno nil. To je důležitý bod při kontrolách na nil v Go.