Sobes.tech
Senior
42

Compito con interfaccia error e nil: cosa mostrerà il codice con diversi modi di assegnare nil?

Le aziende dove è stato chiesto
Flant

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