Проверяет знание внутреннего представления интерфейсного значения и условия его нулевого состояния.
Интерфейс в Go равен nil только когда и его динамический тип, и динамическое значение равны nil. Если у интерфейса установлен тип, но само значение равно nil, интерфейс считается ненулевым и сравнение с nil вернёт false.
Интерфейс хранит две части: указатель на табличку методов (type) и указатель на данные (value).
Nil-интерфейс:
var i interface{} → i == nil.
Оба поля (type и value) равны nil.
Не-nil, но value nil:
var p *int = nil
var i interface{} = p
fmt.Println(i == nil) // false, потому что type=*int, value=nilПоследствия:
Нужно быть осторожным при проверке ошибок: var err error = (*MyError)(nil) не равен nil.
Как избежать:
Проверять и приводить интерфейс к конкретному типу через errors.As или i == (*MyType)(nil).