首页 >后端开发 >Golang >为什么当 Integer 实现 Go 中的 Error 接口时,fmt.Println 会打印'bad error”而不是 5?

为什么当 Integer 实现 Go 中的 Error 接口时,fmt.Println 会打印'bad error”而不是 5?

Barbara Streisand
Barbara Streisand原创
2024-12-04 02:47:09493浏览

Why Does fmt.Println Print

Golang 接口:了解整数到“错误”的转换

在 Golang 中使用接口时,必须理解实现该接口的类型的行为错误()方法。如给定代码片段中所示:

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
}

意图是为类型 T 定义 Error() 方法,期望打印值 5。然而,输出令人惊讶地显示“bad error”。为了弄清楚这个现象,我们必须深入研究fmt包的文档:

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

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

在这种情况下,使用 Println() 时不指定格式,这相当于使用 %v。由于 T 实现了错误接口,因此会调用 Error() 方法,将值转换为“错误错误”,随后将其打印出来。

要打印整数值,需要使用特定的格式说明符,如:

fmt.Printf("%d", v) // Will print the integer value

以上是为什么当 Integer 实现 Go 中的 Error 接口时,fmt.Println 会打印'bad error”而不是 5?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn