当前位置: 首页 > 面试题库 >

格式化错误。新

马承
2023-03-14
问题内容

我想要实现一个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。我决定对一些实际的客户数据进行一些测试,看起来其他产品正在允许来自用户的输入被认为是无效的。无论如何,我仍然必须尝试找出一种解析它的方法。我们正在使用,但输入出现错误,如下所示。 如你所知,说明中包含似乎是无效标签的内容。现在,此描述标签被称为是叶子标签,并且其中不应包含任何嵌套标签。无论如何,这仍然是一个问题,并且会在