首页 > 解决方案 > 为什么这个恐慌示例在 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

标签: gotypes

解决方案


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

所以将代码更改为:

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

推荐阅读