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