Программа напечатает , затем false. Интерфейс e содержит динамический тип *os.PathError, хотя сам указатель равен nil.
Какой вывод получит консоль при запуске программы №68
Программа напечатает <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.