Sobes.tech
Junior — Middle

Kuo skiriasi tuščios sąsajos išraiška nuo nil reikšmės Go kalboje?

sobes.tech AI

Atsakymas iš AI

Go kalboje tuščiasis interfeisas (interface{}) yra tipas, kuris gali turėti bet kokio tipo reikšmę, įskaitant nil. Tačiau tuščiojo interfeiso išraiška ir reikšmė nil yra dvi skirtingos sąvokos.

  • var x interface{} — kintamasis x yra tuščiojo interfeiso tipas, kuris pagal numatytuosius nustatymus yra lygus nil, tai yra, jis neapima nei tipo, nei reikšmės.
  • Tačiau jei jam priskiriama kokia nors reikšmė, pavyzdžiui, x = 5, tada x nebebus nil, nes jis turės int tipą ir reikšmę 5.

Skirtumas tas, kad Go viduje interfeisas yra vaizduojamas dviem rodyklėmis: į tipą ir į reikšmę. Interfeisas yra lygus nil tik tada, kai abi rodyklės yra nil.

Pavyzdys:

var i interface{} // i == nil
var p *int = nil

 i = p // i != nil, nes `*int` tipas yra, net jei reikšmė `nil`

fmt.Println(i == nil) // false

Taigi, tuščias interfeisas gali turėti nil reikšmę konkrečiam tipui, tačiau pats interfeisas nėra nil. Tai svarbus punktas nil patikrinimuose Go kalboje.