Замените все переменные в 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-й одноиндексный аргумент должен быть отформатирован. То же обозначение перед '*' для ширины или точности выбирает индекс аргумента, содержащий значение. После обработки выражения в скобках [n] последующие глаголы будут использовать аргументы n + 1, n + 2 и т.д., Если не указано иное.
Ваш пример:
val := "foo"
s := fmt.Sprintf("%[1]v in %[1]v is %[1]v", val)
fmt.Println(s)