为了账号安全,请及时绑定邮箱和手机立即绑定

golang 接口和为什么输出是“坏错误”?

golang 接口和为什么输出是“坏错误”?

Go
慕后森 2022-11-23 19:14:49

我尝试定义“错误”方法来键入“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

}

这个案子怎么解释?


查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1590条经验 获得超1个赞

这是来自fmt包的文档:

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

还:

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

因此,该值v是使用打印%v的,它将使用error界面打印出来。

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


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信