Sobes.tech
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á x typu prázdné rozhraní, která je ve výchozím nastavení rovna nil, tedy neobsahuje ani typ, ani hodnotu.
  • Pokud však x přiřadíte nějakou hodnotu, například x = 5, pak x již není nil, protože obsahuje typ int a hodnotu 5.

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.