当我编译以下程序时func myPrint(v ...interface{}) { fmt.Println("Hello", v...)}func main() { myPrint("new", "world")}我收到编译错误too many arguments in call to fmt.Println我认为 v... 将扩展为第二个、第三个参数,而 fmt.Println 将看到三项可变参数列表。我认为这相当于fmt.Println("Hello", "new", "world")为什么会报错。
2 回答
富国沪深
TA贡献1790条经验 获得超9个赞
尝试这个。它将 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")
}
慕哥6287543
TA贡献1831条经验 获得超10个赞
您在调用fmt.Println(). 您实际发送的是 2 个参数:一个字符串,然后是interface{}扩展类型的切片。函数调用不会将其连接成单个切片。
此设计将编译并运行您期望的结果:
func myPrint(v ...interface{}) {
fmt.Print("Hello ")
fmt.Println(v...)
}
func main() {
myPrint("new", "world")
}
- 2 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消