Code Fix

中級型付き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

空欄を埋めて実行を通す

広告
広告スロット(未設定)

型付きnilをinterfaceに入れると == nil が false になる

値自体はnilでも、interfaceとしてはnilと等しくなくなります。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)