Fmt.Sprintf, передающий массив аргументов
Извините за основной вопрос. Я хотел бы передать фрагмент в качестве аргументов fmt.Sprintf
. Что-то вроде этого:
values := []string{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)
И результат будет foobarbaz
, но это, очевидно, не работает.
(строка, которую я хочу форматировать, сложнее, поэтому простая конкатенация не будет делать этого:)
Итак, вопрос: если у меня есть массив, как передать его в виде разделенных аргументов на fmt.Sprintf
? Или: могу ли я вызвать функцию, передающую список аргументов в Go?
Ответы
Ответ 1
Как вы узнали в IRC, это будет работать:
values := []interface{}{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)
Исходный код не работает, потому что fmt.Sprintf
принимает []interface{}
и []string
не может быть преобразован в этот тип, неявно или явно.
Ответ 2
Я думаю, что проблема с этим заключается в том, что Sprintf не будет работать с неограниченными фрагментами длины, поэтому это не практично. Количество параметров формата должно соответствовать числу директив форматирования. Вам придется либо извлечь их в локальные переменные, либо написать что-то, чтобы перебрать срез и объединить строки вместе. Я поеду за последним.