为什么下面这个恐慌示例是golang中的一个类型错误?

为什么下面这个恐慌示例是golang中的一个类型错误?,go,types,Go,Types,为什么这次恐慌导致了Golang 1.11中的类型错误?Go没有解释原因,即使它说这是一个常见的错误 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

为什么这次恐慌导致了Golang 1.11中的类型错误?Go没有解释原因,即使它说这是一个常见的错误

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

这是一个功能性的平台:

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

因此,将代码更改为:

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