fmt.Println における String() に対する Error() の優先順位
Go では、fmt.Println を使用してオブジェクトを印刷するときに、String () メソッドは通常、オブジェクトを印刷用の文字列に変換するために使用されます。ただし、場合によっては、Error() メソッドが String() よりも優先されます。
この動作は、fmt.Println の実装によって定義されます。パッケージのドキュメントには、オブジェクトがエラー インターフェイスを実装している場合、オブジェクトを文字列に変換するために Error() メソッドが呼び出されることが記載されています。この文字列は、動詞 (存在する場合) の要求に応じてフォーマットされます。
実際にはエラーの方が重要であると考えられるため、Error() の実装は String() よりも優先されます。これにより、カスタム 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) }
この例では、両方の人物タイプは String() メソッドと Error() メソッドを実装します。ただし、オブジェクトが fmt.Println を使用して印刷される場合、String() の代わりに Error() メソッドが呼び出され、次の出力が得られます。
Failed Failed
これは、Error() の優先順位が Error() よりも高いためです。 fmt.Println の String() を使用して、エラーが明確に表示されるようにします。
したがって、両方を実装するオブジェクトを操作する場合は、 Error() と String() では、目的の出力を考慮し、それに応じて実装を調整することが重要です。
以上がGo で `fmt.Println` が `String()` よりも `Error()` を優先するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。