var p *int = nil; var i interface{} = p; fmt.Println(i == nil)?Выведет false. Интерфейс равен nil только когда и тип (type), и значение (data) равны nil. При присвоении p (тип *int, значение nil) интерфейс получает ненулевой тип - интерфейс "знает", что это *int, поэтому i == nil ложно.
var p *int = nil
var i interface{} = p
fmt.Println(i == nil) // false
fmt.Println(p == nil) // true
func returnsError() error {
var e *MyError = nil
return e // return (error)(e) - тип *MyError, value nil -> error != nil
}
if err := returnsError(); err != nil {
// всегда сюда попадём
}
Решение: возвращать nil как error явно: return (error)(nil) или просто return nil, не присваивая nil в переменную типа *MyError.