Ответ 1
Функции Variadic принимают аргументы как срез типа. В этом случае ваша функция получает []interface{}
с именем args
. Когда вы передаете этот аргумент fmt.Sprintf
, вы передаете его как единственный аргумент типа []interface{}
. Вы действительно хотите передать каждое значение в args
в качестве отдельного аргумента (так же, как вы их получили). Для этого вы должны использовать синтаксис ...
.
str := fmt.Sprintf(format, args...)
Это также объясняется в спецификации Go здесь.