Golang でインターフェイスを操作する場合、そのインターフェイスを実装する型の動作を理解することが不可欠です。 Error() メソッド。指定されたコード スニペットに例示されているように:
type T int func (t T) Error() string { return "bad error" } func main() { var v interface{} = T(5) fmt.Println(v) //output: bad error, not 5 }
その目的は、型 T の Error() メソッドを定義し、値 5 を出力することを期待することです。しかし、出力には驚くべきことに「不正なエラー」が表示されます。この現象を明確にするには、fmt パッケージのドキュメントを詳しく調べる必要があります。
「オペランドがエラー インターフェイスを実装している場合、Error メソッドが呼び出されてオブジェクトを文字列に変換し、その後フォーマットされます」 (存在する場合) 動詞で要求されるとおりです。"
さらに、"Printf のような関数ごとに、形式をとらない Print 関数もあります。すべてのオペランドに対して %v を使用します。別の変種 Println は、オペランドの間に空白を挿入し、改行を追加します。"
この場合、Println() は形式を指定せずに使用されます。これは、%v を使用するのと同じです。 T はエラー インターフェイスを実装しているため、Error() メソッドが呼び出され、値が「不良エラー」に変換され、その後出力されます。
整数値を出力するには、特定の形式指定子を利用する必要があります。例:
fmt.Printf("%d", v) // Will print the integer value
以上がGo で整数がエラー インターフェイスを実装すると、fmt.Println が 5 ではなく「悪いエラー」を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。