如何解决格式化错误新
fmt.Errorf
已经做了您想做的事。查看其来源,可以看到出了什么问题:
// Errorf formats according to a format specifier and returns the string
// as a value that satisfies error.
func Errorf(format string, a ...interface{}) error {
return errors.New(Sprintf(format, a...))
}
请注意,您的代码缺少...
aftera
。从规格:
将参数传递给…参数
如果最终参数可分配给切片类型
[]T
,...T
则在参数后跟时可以将其作为参数的值原样传递...
。在这种情况下,不会创建新的切片。给定切片
s
和调用s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
在中
Greeting
,谁将具有s
与相同基础数组相同的值。
解决方法
我想要实现一个errors.New
接受与参数相同的版本,fmt.Sprintf
因此我编写了以下函数:
func NewError(format string,a ...interface{}) error {
return errors.New(fmt.Sprintf(format,a))
}
但是,它a
成为内部的单个数组参数,NewError()
从而导致Sprintf()
仅在格式字符串中填写单个参数。如何强制a
解释为可变数量的参数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。