🔴 Сложный · 3 очк. Интерфейсы
Что выведет: var p *int = nil; var i interface{} = p; fmt.Println(i == nil)?
A true
B false
C panic
D Ошибка компиляции
Объяснение вопроса

Выведет false. Интерфейс равен nil только когда и тип (type), и значение (data) равны nil. При присвоении p (тип *int, значение nil) интерфейс получает ненулевой тип - интерфейс "знает", что это *int, поэтому i == nil ложно.

var p *int = nil
var i interface{} = p
fmt.Println(i == nil)  // false
fmt.Println(p == nil)  // true

Частая ловушка с ошибками

func returnsError() error {
    var e *MyError = nil
    return e  // return (error)(e) - тип *MyError, value nil -> error != nil
}
if err := returnsError(); err != nil {
    // всегда сюда попадём
}

Решение: возвращать nil как error явно: return (error)(nil) или просто return nil, не присваивая nil в переменную типа *MyError.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.