印刷に %v を使用する: 考慮すべき潜在的な問題
%v 動詞を使用すると、整数 (%d) と文字列の両方を印刷できます。 (%s)。意図しないフォーマットを避けるために、その使用方法を慎重に検討する必要があります。
デフォルト形式と特定の形式
fmt パッケージに値を数値 (基数 10) として出力するように指示する %d 動詞とは異なり、 %v 動詞はデフォルトの形式を使用します。このデフォルト形式は、カスタム型の fmt.Stringer インターフェイス (String() 文字列メソッドを使用) を実装することでオーバーライドできます。
例
次のコードを考えてみましょう。 fmt.Stringer を実装するカスタム タイプ MyInt を使用するインターフェイス:
type MyInt int func (mi MyInt) String() string { return fmt.Sprintf("*%d*", int(mi)) } func main() { var mi MyInt = 2 fmt.Printf("%d %v", mi, mi) }
出力:
2 *2*
%v を使用する場合、fmt パッケージは値が fmt.Stringer を実装しているかどうかを確認し、その String() を呼び出します。方法。これにより、値はオーバーライドされた形式 (「2」ではなく「2」) で表示されます。
形式規則
fmtパッケージは、使用時に特定の一連の書式設定ルールに従います。 %v:
It检查接口实现:
結論
印刷に常に %v を使用することは技術的には可能ですが、一般的には特定の動詞を使用することをお勧めします。整数と文字列の %d と %s のように。型が特定のインターフェイス、特に fmt.Stringer.
を実装している場合、%v を使用すると、予期しない書式設定動作が発生する可能性があります。以上がGo での印刷に `%v` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。