为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:可变参数

Golang:可变参数

Go
慕森王 2021-11-15 16:05:27
当我编译以下程序时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")

}


查看完整回答
反对 回复 2021-11-15
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

您在调用fmt.Println(). 您实际发送的是 2 个参数:一个字符串,然后是interface{}扩展类型的切片。函数调用不会将其连接成单个切片。


此设计将编译并运行您期望的结果:


func myPrint(v ...interface{}) {

    fmt.Print("Hello ")

    fmt.Println(v...)

}


func main() {

    myPrint("new", "world")

}


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信