我有以下代码:
import "fmt"
func main() {
P("1","2","3",0)
}
func P(prefix string,a ...interface{}){
fmt.Println(prefix,a)
}
结果是:
1 [2 3 0]
但是我想获得以下结果之一:
1 2 3 0
[1 2 3 0]
换句话说:所有参数都具有相同的重要性,因此不应以特殊方式处理参数。
答案 0 :(得分:1)
import "fmt"
func main() {
P("1","2","3",0)
}
func P(a ...interface{}){
fmt.Println(a)
}
结果是:
[1 2 3 0]
答案 1 :(得分:0)
Evgeny的解决方案(更改功能签名)是最好的,但是如果您由于某种原因无法更改功能签名:
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{}
毫无意义-定义一个类型并坚持下去!