В Go nil может иметь тип (например, (*int)(nil), ([]int)(nil)). При сравнении интерфейса с nil: если интерфейс хранит тип и значение nil указателя, то iface == nil даёт false (typed nil). Поэтому часто проверяют ошибки через if err != nil после приведения к конкретному типу или используют errors.Is.