String() に対する Error() の優先順位
Go では、fmt パッケージが印刷操作を処理します。オブジェクトに Error() メソッドと String() メソッドの両方が実装されている場合、印刷目的では Error() メソッドが String() よりも優先されます。
この優先順位は、エラーの実際的な重要性に由来しています。通常、エラーは一般的な文字列表現よりも伝えることが重要です。したがって、オブジェクトがエラー インターフェイスを実装している場合、その Error() メソッドがフォーマットと印刷に使用されます。
この動作は、fmt のパッケージのドキュメントに記載されています。次の抜粋では優先順位について説明しています。
3. If an operand implements the error interface, the Error method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any). 4. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
例
次のコードを考えてみましょう。
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) }
この例では、 type は String() メソッドと Error() メソッドの両方を実装します。 fmt.Println() 関数が呼び出されると、String() の代わりに Error() メソッドが呼び出され、次の出力が得られます。
Failed Failed
これは、String() に対する Error() の優先順位を示しています。 ) Go の印刷機能。
以上がGo の `fmt` パッケージが印刷時に `String()` よりも `Error()` を優先するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。