猿问

为什么下面这个 panic 例子是 golang 的类型错误?

为什么这个 panicf-sprintf在 Golang 1.11 中导致类型错误?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


慕沐林林
浏览 129回答 1
1回答

Cats萌萌

panicf()接受i作为可变参数,与fmt.Sprintf(). 因此,您必须告诉编译器您希望将 的每个值i发送到,fmt.Sprintf()而不是将整个值作为一个切片发送。所以把代码改成:func panicf(s string, i ...interface{}) { panic(fmt.Sprintf(s, i...)) }
随时随地看视频慕课网APP

相关分类

Go
我要回答