ホームページ > バックエンド開発 > Golang > 型が `error` インターフェイスを実装しているときに、`fmt.Println` が整数値の代わりに「bad error」を出力するのはなぜですか?

型が `error` インターフェイスを実装しているときに、`fmt.Println` が整数値の代わりに「bad error」を出力するのはなぜですか?

Susan Sarandon
リリース: 2024-12-09 07:46:07
オリジナル
769 人が閲覧しました

Why Does `fmt.Println` Print

インターフェイスがカスタム タイプのエラー メソッドに対して「悪いエラー」を返すのはなぜですか?

Go ではインターフェイスを使用できます型のメソッドを定義します。オブジェクトがインターフェイスを実装すると、そのインターフェイスで定義された各メソッドの実装が提供されます。

次の例を考えてみましょう:

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) // Output: "bad error"
}
ログイン後にコピー

この例では、Error メソッドが定義されています。ただし、値 v が fmt.Println を使用して出力されると、出力は期待される整数値 5 ではなく「不正なエラー」になります。この動作を理解するには、次のようにします。 fmt パッケージのドキュメントを参照してください:

  • オペランドが error インターフェイスを実装している場合、Error メソッドが呼び出されてオブジェクトを文字列に変換し、動詞 (
  • Printf のような関数ごとに、形式をとらない Print 関数もあり、すべての関数に対して %v と言うのと同等です。 operand.

この場合、fmt.Println 関数が使用されます。これは、fmt.Printf("%v", v) と同等です。何が起こるかの説明は次のとおりです。

  • T はエラー インターフェイスを実装しているため、値 v に対して Error メソッドが呼び出されます。
  • Error メソッドは文字列「bad error」を返します。
  • この文字列は %v 動詞によってフォーマットされ、次のように出力されます。 Output.

代わりに v の整数値を出力するには、fmt.Printf("%d",v) を使用できます。

以上が型が `error` インターフェイスを実装しているときに、`fmt.Println` が整数値の代わりに「bad error」を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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