fmt.Println() の Error() メソッドが String() メソッドを無効にする理由
String() と Error の両方を実装する場合カスタム型の () メソッドを使用すると、 fmt.Println() が Error() メソッドを優先する状況が発生する可能性があります。 String() メソッド。
これは、オブジェクトをフォーマットするために呼び出すメソッドを選択するときに fmt パッケージが階層を採用しているためです。パッケージのドキュメントによると、次の操作順序が適用されます。
この階層ではエラー インターフェイスが String() インターフェイスよりも上位にランクされているため、特定のオブジェクトに対して両方のメソッドが実装されている場合、fmt.Println() は Error() メソッドを優先します。これは、エラーは通常、より緊急の対応が必要であり、明確かつ簡潔な方法で速やかに伝える必要があるためです。
ここで提供されている例では、Person 型は String() メソッドと Error() メソッドの両方を実装しています。ただし、Error() メソッドは単に文字列「Failed」を返すだけですが、String() メソッドはその人物に関するより有益な説明を提供します。 fmt.Println() を使用して Person タイプのインスタンスを出力する場合、前述の階層により Error() メソッドが String() メソッドよりも優先されるため、「失敗」メッセージのみが表示されます。
以上がカスタム型に対して `fmt.Println()` が `String()` よりも `Error()` を優先するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。