在 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中文网其他相关文章!