-1
誰かがこのgo codeを私に説明できますか?
これが呼び出されると、err != nil
は真を返し、したがってポインタの参照がnilになります。私はこれは私がインターフェイスにキャストはnil-構造体ポインタを扱っていたという事実とは何かを持っていることを理解しているインターフェイスでのnilテストに失敗する
type E struct{}
func (e E) Error() string {
return ""
}
func DoStuff() *E {
return nil
}
func main() {
var err *E
err = DoStuff()
log.Println(err) // nil
testErr(err)
}
func testErr(err error) {
if err != nil {
log.Println("got error", err.Error())
}
}
https://play.golang.org/p/iys7U_UMhG
...
は、しかし、私は混乱していますこのインターフェイスをどのように設計するか、普通のerror
だけでなく、 "スマート"エラーオブジェクトを返そうとする場合。
「エラーが発生しました」 - 渡されたエラー値が実際にnilであるにもかかわらず:
動作するはずです後(私だけ
Error
方法の受信機のための*
を追加しましたか? – cfstras