Go で整数と文字列を出力するために %v の使用を避けるべきなのはなぜですか?

Barbara Streisand
リリース: 2024-11-12 11:02:02
オリジナル
590 人が閲覧しました

Why Should You Avoid Using %v for Printing Integers and Strings in Go?

整数と文字列の出力に %v を使用する場合の欠点

整数と文字列の両方に %v を使用することは許可されていますが、そうではありません「fmt」パッケージで予期しない動作が発生する可能性があるため、これをお勧めします。

%d と %v の役割を理解する

  • %d は特に整数を出力します基数 10 を使用します。
  • %v は、デフォルトの書式設定を使用して値を出力しようとします。これは、実装されたインターフェイスに応じてオーバーライドできます。

カスタム フォーマッタを使用した例

type MyInt int

func (mi MyInt) String() string {
    return fmt.Sprint("*", int(mi), "*")
}

func main() {
    var mi MyInt = 2
    fmt.Printf("%d %v", mi, mi)
}
ログイン後にコピー

出力:

2 *2*
ログイン後にコピー

この例では、%v を使用していますが、MyInt の String() メソッドは String を実装するときに呼び出されます。 fmt.Stringer インターフェイスの () メソッドにより、整数にカスタム書式設定が適用されます。

%v のデフォルトの書式設定ルール

「fmt」によるパッケージのドキュメントでは、%v は次のルールを順番に使用しようとします:

  • オペランドによって実装されている場合は Formatter インターフェイスを呼び出します。
  • #%v 形式が使用されている場合は GoStringer インターフェイスを呼び出します.
  • オペランドがエラー インターフェイスを実装する場合は、Error メソッドを使用します。
  • 利用可能な場合は、String() メソッドを使用します。

潜在的な問題

%v を使用して整数を出力すると、デフォルトの書式設定が予期される %d の動作をオーバーライドする場合に混乱が生じる可能性があります。たとえば、ポインタや複素数値などの特殊な型を扱う場合、%v を使用すると予期しない出力が発生する可能性があります。

結論

%v は書式設定に柔軟性をもたらしますが、一般に、明確さを確保し、潜在的な曖昧さを避けるために、整数には %d、文字列には %s などの特定の動詞を使用することをお勧めします。

以上がGo で整数と文字列を出力するために %v の使用を避けるべきなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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