Какой текст выведет программа в примере №10

Будет выведено val is not nil: интерфейс val содержит тип *int и nil-указатель, а не полностью пустой интерфейс.

Короткий ответ

Что ответить на собеседовании

Будет выведено val is not nil: интерфейс val содержит тип *int и nil-указатель, а не полностью пустой интерфейс.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой вывод появится в консоли после выполнения следующей программы.

func main(){
    var ptr *int
    var val interface{}
    
    val = ptr
            
    if val == nil{
        fmt.Println("val is nil")
        return        
    }
    fmt.Println("val is not nil")
}

Ответ

Будет выведено val is not nil: интерфейс val содержит тип *int и nil-указатель, а не полностью пустой интерфейс.

Присваивание val = ptr сохраняет динамический тип ptr. Равенство интерфейса nil требует отсутствия и типа, и значения.

Чтобы проверить именно указатель, сравните ptr с nil до упаковки либо выполните type assertion и проверьте полученный *int. Нельзя считать всякий ненулевой interface{} существующим объектом. Такая же особенность проявляется при возврате error, когда функция возвращает типизированный nil-указатель.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее