中級 › 型付きnilをinterfaceに入れると == nil が false になる › パターン2
型付きnilをinterfaceに入れると == nil が false になる
nilのポインタをerrorなどのinterface型の変数に代入すると、そのinterfaceは型情報を持った「型付きnil」になります。
1 package main 2 3 import "fmt" 4 5 type ValidationError struct{} 6 7 func (e *ValidationError) Error() string { return "invalid" } 8 9 func validate() error { 10 var e *ValidationError 11 _ = e 12 _________________________ ^ 13 } 14 15 func main() { 16 err := validate() 17 fmt.Println(err == nil) 18 }
出力: false
空欄を埋めて実行を通す
エラーが無いことを表すつもりでも、型付きの変数をそのままreturnするとinterfaceとしては非nil扱いになります。
次の問題