Решение Евгения (изменение сигнатуры функции) лучше, но если вы не можете изменить сигнатуру функции по любой причине:
func P(prefix string, a ...interface{}) {
toPrint := []interface{}{prefix}
toPrint = append(toPrint, a...)
fmt.Println(toPrint...) // 1 2 3 0
// without the `...` you get [1 2 3 0]
}
Или вы можете просто fmt.Printf
в цикле:
func P(prefix string, a ...interface{}) {
fmt.Print(prefix)
for _, aa := range a {
fmt.Printf(" %v", aa)
}
fmt.Println() // for your final newline
}
Конечно, даже лучше решение включает в себя устранение всех сомнений относительно типа, который вы передаете. interface{}
ничего не значит - определите тип и придерживайтесь его!