Sobes.tech
Senior
39

Zadatak sa interfejs error i nil: šta će prikazati kod sa različitim načinima dodeljivanja nil?

Компаније где су питане
Flant

Одговор од АИ

sobes.tech АИ

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