编译以下程序时
func myPrint(v ...interface{}) {
fmt.Println("Hello", v...)
}
func main() {
myPrint("new", "world")
}
我收到编译错误
too many arguments in call to fmt.Println
我认为v ...将扩展为第2,第3个参数,fmt.Println将看到三个项可变参数列表。我认为这相当于
fmt.Println("Hello", "new", "world")
为什么会出错。
答案 0 :(得分:4)
试试这个。它为可变参数添加Hello,然后使用println
一次打印所有参数。
package main
import "fmt"
func myPrint(v ...interface{}) {
a := append([]interface{}{"Hello"}, v...) // prepend "Hello" to variadics
fmt.Println(a...) // println the whole lot
}
func main() {
myPrint("new", "world")
}
答案 1 :(得分:2)
您在调用fmt.Println()
时误用了可变速记。你实际发送的是2个参数:一个字符串,然后展开interface{}
类型的切片。函数调用不会将其连接到单个切片中。
此设计将编译并运行您期望的结果:
func myPrint(v ...interface{}) {
fmt.Print("Hello ")
fmt.Println(v...)
}
func main() {
myPrint("new", "world")
}