Code Fix

中級型付きnilをinterfaceに入れると == nil が false になる › パターン5

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

nilのポインタをerrorなどのinterface型の変数に代入すると、そのinterfaceは型情報を持った「型付きnil」になります。

 1  package main
 2  
 3  import "fmt"
 4  
 5  type ParseError struct{}
 6  
 7  func (e *ParseError) Error() string { return "parse failed" }
 8  
 9  func parse() error {
10  	var e *ParseError
11  	_ = e
12  	____________________
               ^
13  }
14  
15  func main() {
16  	err := parse()
17  	fmt.Println(err == nil)
18  }
出力: false

空欄を埋めて実行を通す

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

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

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

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

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