Подтвердить что ты не робот

Замените все переменные в Sprintf той же переменной

Можно ли использовать fmt.Sprintf() для замены всех переменных в форматированной строке с тем же значением?

Что-то вроде:

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

который вернет

"foo in foo is foo"
4b9b3361

Ответ 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)

Выход (попробуйте на Go Playground):

foo in foo is foo

Конечно, приведенный выше пример можно просто написать в одной строке:

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

Также как небольшое упрощение, первый индекс явного аргумента может быть опущен, поскольку по умолчанию он равен 1:

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

Ответ 2

Что я мог бы использовать для той же функциональности в RStudio?