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

可变参数函数传递

可变参数函数传递

Go
翻翻过去那场雪 2021-05-04 14:22:07
情况:我正在尝试编写一个简单的fmt.Fprintf包装程序,该包装程序使用可变数量的参数。这是代码:func Die(format string, args ...interface{}) {    str := fmt.Sprintf(format, args)    fmt.Fprintf(os.Stderr, "%v\n", str)    os.Exit(1)}问题:当我用调用它时Die("foo"),得到以下输出(而不是“ foo ”):foo%!(EXTRA []界面{} = [])为什么在“ foo ”之后有“ %!(EXTRA [] interface {} = [])) ”?在周围创建包装的正确方法是什么fmt.Fprintf?
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

可变参数函数将参数作为类型的切片接收。在这种情况下,您的函数将接收一个[]interface{}named args。当您将该参数传递给时fmt.Sprintf,您会将其作为类型的单个参数传递[]interface{}。您真正想要的是将每个值args作为一个单独的参数传入(与接收它们的方式相同)。为此,您必须使用...语法。

str := fmt.Sprintf(format, args...)

这也被转到说明书中说明这里


查看完整回答
反对 回复 2021-05-17
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

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