Sobes.tech
Back to questions
Senior
1

Задача с интерфейсом error и nil: что выведет код с различными способами присвоения nil?

Companies where asked
Flant

Answer from AI

sobes.tech AI

В Go интерфейс error — это интерфейс с одним методом Error(). При присвоении nil переменной типа error важно понимать, что интерфейс состоит из двух частей: тип и значение. Если интерфейс содержит тип, но значение nil, то интерфейс в целом не равен nil.

Пример:

var err error
fmt.Println(err == nil) // true, err не инициализирован

var ptr *MyError = nil
err = ptr
fmt.Println(err == nil) // false, err содержит тип *MyError, но значение nil

Таким образом, если присвоить переменной error значение nil указателя на ошибку, то проверка err == nil вернёт false, что может привести к неожиданному поведению. Чтобы избежать этого, нужно явно проверять и саму переменную, и её внутреннее значение, либо использовать конструкторы ошибок, возвращающие nil, если ошибки нет.