我想要实现一个errors.New
接受与参数相同的版本,fmt.Sprintf
因此我编写了以下函数:
func NewError(format string, a ...interface{}) error {
return errors.New(fmt.Sprintf(format, a))
}
但是,它a
成为内部的单个数组参数,NewError()
从而导致Sprintf()
仅在格式字符串中填写单个参数。如何强制a
解释为可变数量的参数?
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...))
}
请注意,您的代码缺少...
after
a
。从规格:
将参数传递给…参数
如果最终参数可分配给切片类型
[]T
,...T
则在参数后跟时可以将其作为参数的值原样传递...
。在这种情况下,不会创建新的切片。给定切片
s
和调用s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
在中
Greeting
,谁将具有s
与相同基础数组相同的值。
我是漏掉了什么,还是一个虫子?
/home/sonali/hadoop-2.2.0/bin/hdfs:第201行:/usr/lib/jvm/java-6-openjdk-i386/bin/java:没有这样的文件或目录
我想将我的时间戳转换为XXhours:YYminutes字符串。我的方法有时可以正常工作,除非它获得更大的值。例如, 193500000 -
在将配置单元外部表从RC格式升级为ORC格式并在其上运行MSCK修复表(当我确实从表中选择全部时)时,我得到以下错误- 将RC格式的历史数据迁移到ORC格式的新定义的过程是什么?
我们可以看到格式化就是通过格式字符串得到特定格式: format!("{}", foo) -> "3735928559" format!("0x{:X}", foo) -> "0xDEADBEEF" format!("0o{:o}", foo) -> "0o33653337357" 根据使用的参数类型,同样的变量(foo)能够格式化成不同的形式:X, o 和未指定形式。 这个格式化的功能是通过 t
问题内容: 目前,我正在开发一项功能,该功能涉及解析从另一产品收到的XML。我决定对一些实际的客户数据进行一些测试,看起来其他产品正在允许来自用户的输入被认为是无效的。无论如何,我仍然必须尝试找出一种解析它的方法。我们正在使用,但输入出现错误,如下所示。 如你所知,说明中包含似乎是无效标签的内容。现在,此描述标签被称为是叶子标签,并且其中不应包含任何嵌套标签。无论如何,这仍然是一个问题,并且会在