ホームページ > バックエンド開発 > Golang > Go ではなぜ `fmt.Println` が `String()` よりも `Error()` を好むのでしょうか?

Go ではなぜ `fmt.Println` が `String()` よりも `Error()` を好むのでしょうか?

Susan Sarandon
リリース: 2024-11-30 04:22:11
オリジナル
693 人が閲覧しました

Why Does `fmt.Println` Prefer `Error()` Over `String()` in Go?

Error() fmt.Println の String() をオーバーライドします

Go プログラミング言語では、型が String() と String() の両方を実装する場合、 Error() メソッドでは、fmt.Println 関数が Error() より優先されます。これは、両方のメソッドが特定の型に対して実装されている場合、fmt.Println は Error() によって生成された出力を使用することを意味します。

これが当てはまる理由を理解するには、 fmtパッケージ。ドキュメントによると、fmt がさまざまな種類のデータをフォーマットする方法を管理する特定のルールがあります。これらのルールは次の順序で適用されます。

  1. データが Formatter インターフェイスを実装する場合、Formatter メソッドを使用してデータをフォーマットします。
  2. %#v 形式が使用される場合データが GoStringer インターフェイスを実装している場合、GoStringer メソッドを使用してデータをフォーマットします。
  3. データがエラー インターフェイスを実装している場合、データのフォーマットには Error メソッドが使用されます。
  4. データが String() メソッドを実装する場合、String() メソッドはデータのフォーマットに使用されます。

提供された例では、 Person 型は String() メソッドと Error() メソッドの両方を実装します。ただし、fmt.Println 関数を呼び出して Person 型を出力する場合、String() メソッドの代わりに Error() メソッドが呼び出されます。これは、fmt パッケージのドキュメントで概説されているルールに従って、Error() メソッドが String() メソッドよりも優先されるためです。

したがって、型が String() メソッドと Error() メソッドの両方を実装する場合、 fmt.Println 関数は常に Error() メソッドの出力を使用します。これは、書式設定ルールの順序で Error() メソッドが String() メソッドよりも上位にあるためです。

以上がGo ではなぜ `fmt.Println` が `String()` よりも `Error()` を好むのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート