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 не будет работать с неограниченными фрагментами длины, поэтому это не практично. Количество параметров формата должно соответствовать числу директив форматирования. Вам придется либо извлечь их в локальные переменные, либо написать что-то, чтобы перебрать срез и объединить строки вместе. Я поеду за последним.