【问题标题】:golang interface and why output is "bad error"? [duplicate]golang 接口以及为什么输出是“错误错误”? [复制]
【发布时间】:2022-12-13 07:37:19
【问题描述】:

我尝试定义“错误”方法来键入“T”,但为什么值改变了?

type T int

func (t T) Error() string {
    return "bad error"
}

func main() {
    var v interface{} = T(5)
    fmt.Println(v) //output: bad error, not 5
}

这个案子怎么解释?

【问题讨论】:

    标签: go go-interface


    【解决方案1】:

    这是来自 fmt 包的文档:

    如果操作数实现了错误接口,将调用 Error 方法将对象转换为字符串,然后根据动词(如果有)的要求对其进行格式化。

    还:

    对于每个类似 Printf 的函数,还有一个不采用格式的 Print 函数,相当于对每个操作数说 %v。另一个变体 Println 在操作数之间插入空格并附加一个换行符。

    因此,值v 是使用%v 打印的,它将使用error 接口将其打印出来。

    如果您使用fmt.Printf("%d",v),它应该打印整数值。

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多