Junior — Middle
Каква е разликата между празен интерфейс и стойността nil в езика Go?
sobes.tech AI
Отговор от AI
В езика Go, празният интерфейс (interface{}) е тип, който може да съдържа стойност от всякакъв тип, включително nil. Въпреки това, изразът на празен интерфейс и стойността nil са две различни неща.
var x interface{}— променливаxот тип празен интерфейс, която по подразбиране е равна наnil, тоест не съдържа нито тип, нито стойност.- Но ако ѝ присвоите някаква стойност, например
x = 5, тогаваxвече не еnil, тъй като съдържа типаintи стойността5.
Разликата е, че интерфейсът в Go е представен вътрешно чрез два указателя: към типа и към стойността. Интерфейсът е равен на nil само ако и двата указателя са nil.
Пример:
var i interface{} // i == nil
var p *int = nil
i = p // i != nil, тъй като типът *int е наличен, въпреки че стойността е `nil`
fmt.Println(i == nil) // false
Следователно, празният интерфейс може да съдържа стойност nil от конкретен тип, но самият интерфейс няма да бъде равен на nil. Това е важен момент при проверки за nil в Go.