Какой вывод получит консоль при запуске программы №68

Программа напечатает <nil>, затем false. Интерфейс e содержит динамический тип *os.PathError, хотя сам указатель равен nil.

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

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

Программа напечатает , затем false. Интерфейс e содержит динамический тип *os.PathError, хотя сам указатель равен nil.

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

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

Условие

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

package main

import "fmt"
import "os"

func Foo() error {
    var err *os.PathError = nil
    return err        
}

func main() {
    e := Foo()
    fmt.Println(e)
    fmt.Println(e == nil)        
}

Ответ

Программа напечатает , затем false. Интерфейс e содержит динамический тип *os.PathError, хотя сам указатель равен nil.

Интерфейс равен nil только при отсутствии и динамического типа, и значения. Возврат типизированного nil из Foo создаёт ненулевой error.

fmt при форматировании такого nil-указателя выводит <nil>: это не доказательство равенства интерфейса nil. Прямое обращение к полям ошибки или вызов её метода может иметь другое поведение. Если ошибки нет, Foo должна вернуть nil непосредственно; это устраняет ложное срабатывание проверки if e != nil.

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

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

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

Подробнее