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, если ошибки нет.