为什么在golang中的类型错误下方出现此紧急示例?

时间:2018-11-09 16:42:56

标签: go types

此panicf-sprintf为什么在Golang 1.11中引起 type 错误? Go不能解释原因,即使它说这是一个常见错误。

https://golang.org/doc/go1.11#vet

go vet现在在构建过程中被强制执行。

func panicf(s string, i ...interface{}) { panic(fmt.Sprintf(s, i)) }

测试正在返回

missing ... in args forwarded to printf-like function

vet将此描述为

func (*ptrStringer) BadWrap(x int, args ...interface{}) string {
    return fmt.Sprint(args) // ERROR "missing ... in args forwarded to print-like function"
}

func (*ptrStringer) BadWrapf(x int, format string, args ...interface{}) string {
    return fmt.Sprintf(format, args) // ERROR "missing ... in args forwarded to printf-like function"

在此情况下,请在 golang 中帮助解释...

这是一个实用的游乐场:https://play.golang.org/p/DijjanQNkxK

1 个答案:

答案 0 :(得分:2)

panicf()接受i作为可变参数,与fmt.Sprintf()相同。因此,您必须告诉编译器您希望将i的每个值发送到fmt.Sprintf(),而不是将整个内容作为切片发送。

因此将代码更改为:

func panicf(s string, i ...interface{}) { panic(fmt.Sprintf(s, i...)) }