2016-05-03 103 views

回答

16

這是可能的,但格式字符串必須進行修改,則必須使用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")