Sprintf 内のすべての変数を同じ変数に置き換える 質問する

Sprintf 内のすべての変数を同じ変数に置き換える 質問する

fmt.Sprintf()を使用して、フォーマットされた文字列内のすべての変数を同じ値に置き換えることは可能ですか?

何かのようなもの:

val := "foo"
s := fmt.Sprintf("%v in %v is %v", val)

戻ってくる

"foo in foo is foo"

ベストアンサー1

可能ですが、フォーマット文字列を変更する必要があり、明示的な引数インデックス:

明示的な引数インデックス:

Printf、Sprintf、および Fprintf では、デフォルトの動作では、各書式設定動詞は、呼び出しで渡される連続した引数を書式設定します。ただし、動詞の直前の表記 [n] は、代わりに n 番目の 1 インデックス引数が書式設定されることを示します。幅または精度の '*' の前の同じ表記は、値を保持する引数インデックスを選択します。括弧で囲まれた式 [n] を処理した後、後続の動詞は、特に指示がない限り、引数 n+1、n+2 などを使用します。

あなたの例:

val := "foo"
s := fmt.Sprintf("%[1]v in %[1]v is %[1]v", val)
fmt.Println(s)

出力(遊び場に行く):

foo in foo is foo

もちろん、上記の例は単純に 1 行で記述することもできます。

fmt.Printf("%[1]v in %[1]v is %[1]v", "foo")

また、少し簡略化するために、最初の明示的な引数インデックスは、デフォルトで次のように省略できます1

fmt.Printf("%v in %[1]v is %[1]v", "foo")

おすすめ記事