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{}— kintamasisxyra tuščiojo interfeiso tipas, kuris pagal numatytuosius nustatymus yra lygusnil, tai yra, jis neapima nei tipo, nei reikšmės.- Tačiau jei jam priskiriama kokia nors reikšmė, pavyzdžiui,
x = 5, tadaxnebebusnil, nes jis turėsinttipą 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.