Go における String() に対する Error() の優先度
Go では、fmt パッケージは型に基づいて値の出力を処理します。オブジェクトが Error() メソッドと String() メソッドの両方を実装している場合、Error() メソッドが優先されます。この動作は、エラー処理を優先する fmt の実装に起因します。
fmt パッケージのドキュメントによると、オペランドがエラー インターフェイスを実装している場合、Error() メソッドが呼び出され、オブジェクトを文字列に変換する前にオブジェクトが文字列に変換されます。任意の書式設定を適用します。このロジックは、このロジックを実装するオペランドに対してデフォルトで呼び出される String() メソッドをオーバーライドします。
次のコードは、この動作を示しています。
package main import "fmt" type Person struct { Name string Age int } func (p *Person) String() string { return fmt.Sprintf("%v (%v years)", p.Name, p.Age) } func (p *Person) Error() string { return fmt.Sprintf("Failed") } func main() { a := &Person{"Arthur Dent", 42} z := &Person{"Zaphod Beeblebrox", 9001} fmt.Println(a, z) }
出力:
Failed Failed
この例では、Person 型が String() と String() の両方を実装しているにもかかわらず、 Error() メソッドが優先されるため、fmt.Println 関数は両方の人に「失敗」を出力します。これは、エラーはより重大であると考えられており、即時の対応が必要であるためです。
以上が両方が実装されている場合、なぜ Go の `fmt` パッケージは `String()` よりも `Error()` を優先するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。