Вопрос: Как работают интерфейсы с nil и почему "interface != nil" при nil внутри?
Go
Junior
Без компании
Вопрос: Как работают интерфейсы с nil и почему "interface != nil" при nil внутри?
Ответы
Интерфейс — это (type, value). Он равен nil только если и type=nil, и value=nil. Если type задан, а value=nil — интерфейс не nil.
```go
package main
import "fmt"
type MyErr struct{}
func (MyErr) Error() string { return "x" }
func f() error {
var e *MyErr = nil
return e // type=*MyErr, value=nil
}
func main() {
err := f()
fmt.Println(err == nil) // false
}
```
Решение: возвращать nil явно, если ошибки нет.