13
是否可以使用fmt.Sprintf()
來替換具有相同值的格式化字符串中的所有變量?用相同的變量替換Sprintf中的所有變量
喜歡的東西:
val := "foo"
s := fmt.Sprintf("%v in %v is %v", val)
這將返回
"foo in foo is foo"
是否可以使用fmt.Sprintf()
來替換具有相同值的格式化字符串中的所有變量?用相同的變量替換Sprintf中的所有變量
喜歡的東西:
val := "foo"
s := fmt.Sprintf("%v in %v is %v", val)
這將返回
"foo in foo is foo"
這是可能的,但格式字符串必須進行修改,則必須使用explicit argument indicies:
明確的說法指標:
在Printf,Sprintf和Fprintf中,默認行爲是針對每個格式化動詞來格式化在調用中傳遞的連續參數。但是,動詞前面的記號[n]表示第n個單索引參數要被格式化。寬度或精度的'*'前的相同符號選擇包含該值的參數索引。處理括號表達式[n]後,除非另有指示,否則隨後的動詞將使用參數n + 1,n + 2等。
你例如:
val := "foo"
s := fmt.Sprintf("%[1]v in %[1]v is %[1]v", val)
fmt.Println(s)
輸出(嘗試在Go Playground):
foo in foo is foo
當然上面的例子中可以簡單地在一行被寫成:
fmt.Printf("%[1]v in %[1]v is %[1]v", "foo")
同樣作爲一個小的簡化,第一個expli可以省略cit參數索引,因爲它默認爲1
:
fmt.Printf("%v in %[1]v is %[1]v", "foo")