Junior — Middle
Selgitage, miks Golangis kahe korda muutuja võrdlemine nil väärtusega võib anda tulemuseks False erinevate muutujate puhul, mille väärtus on sama nil
sobes.tech AI
Vastus AI-lt
Go keeles väärtus nil võib omada erinevat sisemist esitamist sõltuvalt muutuja tüübist (näiteks näitaja, liides, viil, kaart jne). Liideste muutujate võrdlemisel nil-ga on oluline mõista, et liides koosneb kahest osast: tüübist ja väärtusest.
Kui kaks liidese muutujat omavad sama nil väärtust, kuid erinevaid tüüpe või sisemisi esitamisi, võib võrdlus nil-ga tagastada false.
Näide:
var p *int = nil
var i interface{} = p
fmt.Println(p == nil) // true
fmt.Println(i == nil) // false, sest i sisaldab tüüpi *int ja väärtust nil
Siin, i ei ole võrdne nil-ga, kuna liideses hoitakse tüüpi *int ja väärtust nil, mitte ise liidest tühja tüübi ja väärtusega.
Seetõttu võib topeltvõrdlus muutujaga nil anda erinevaid tulemusi, kui muutujad omavad erinevaid tüüpe või sisemisi esitamisi, isegi kui väliselt näivad olevat nil.