ホームページ > バックエンド開発 > Golang > Go で整数がエラー インターフェイスを実装すると、fmt.Println が 5 ではなく「悪いエラー」を出力するのはなぜですか?

Go で整数がエラー インターフェイスを実装すると、fmt.Println が 5 ではなく「悪いエラー」を出力するのはなぜですか?

Barbara Streisand
リリース: 2024-12-04 02:47:09
オリジナル
477 人が閲覧しました

Why Does fmt.Println Print

Golang インターフェイス: 整数から「Bad Error」への変換を理解する

Golang でインターフェイスを操作する場合、そのインターフェイスを実装する型の動作を理解することが不可欠です。 Error() メソッド。指定されたコード スニペットに例示されているように:

type T int

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

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

その目的は、型 T の Error() メソッドを定義し、値 5 を出力することを期待することです。しかし、出力には驚くべきことに「不正なエラー」が表示されます。この現象を明確にするには、fmt パッケージのドキュメントを詳しく調べる必要があります。

「オペランドがエラー インターフェイスを実装している場合、Error メソッドが呼び出されてオブジェクトを文字列に変換し、その後フォーマットされます」 (存在する場合) 動詞で要求されるとおりです。"

さらに、"Printf のような関数ごとに、形式をとらない Print 関数もあります。すべてのオペランドに対して %v を使用します。別の変種 Println は、オペランドの間に空白を挿入し、改行を追加します。"

この場合、Println() は形式を指定せずに使用されます。これは、%v を使用するのと同じです。 T はエラー インターフェイスを実装しているため、Error() メソッドが呼び出され、値が「不良エラー」に変換され、その後出力されます。

整数値を出力するには、特定の形式指定子を利用する必要があります。例:

fmt.Printf("%d", v) // Will print the integer value
ログイン後にコピー

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

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