fmt.Sprintf передавая массив аргументов - PullRequest
12 голосов
/ 22 августа 2011

Извините за основной вопрос.Я хотел бы передать срез в качестве аргумента fmt.Sprintf.Примерно так:

values := []string{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)

И результат будет foobarbaz, но это, очевидно, не сработает.

(строка, которую я хочу отформатировать, сложнее,простая конкатенация не сделает этого:)

Поэтому вопрос таков: если у меня есть массив, как я могу передать его как отдельные аргументы fmt.Sprintf?Или: можно ли вызвать функцию, передающую список аргументов в Go?

Ответы [ 2 ]

13 голосов
/ 23 августа 2011

Как вы узнали на IRC, это будет работать:

values := []interface{}{"foo", "bar", "baz"}
result := fmt.Sprintf("%s%s%s", values...)

Ваш исходный код не работает, потому что fmt.Sprintf принимает []interface{} и []string не может быть преобразован в этот тип, неявно или явно.

0 голосов
/ 22 августа 2011

Думаю, проблема в том, что Sprintf не будет работать с ломтиками неограниченной длины, поэтому это не практично.Количество параметров форматирования должно соответствовать количеству директив форматирования.Вам нужно будет либо извлечь их в локальные переменные, либо написать что-то, чтобы перебрать фрагмент и объединить строки вместе.Я бы пошел на последнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...