首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可变函数参数传递

可变函数参数传递
EN

Stack Overflow用户
提问于 2012-09-09 05:36:23
回答 1查看 11.6K关注 0票数 38

情况:

我正在尝试编写一个简单的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%!(

[]接口{}=[])

接口为什么“foo”后面有"%!(EXTRA []

  • {}=[])“?
  • 围绕foo创建包装器的正确方法是什么
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-09 06:12:55

变量函数将参数作为类型的一部分接收。在本例中,您的函数接收一个名为args[]interface{}。当您将该参数传递给fmt.Sprintf时,您将其作为[]interface{}类型的单个参数进行传递。您真正想要的是将args中的每个值作为单独的参数传递(与接收它们的方式相同)。为此,您必须使用...语法。

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

Go规范here中也解释了这一点。

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12334697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档