首页 > 后端开发 > Golang > 当类型实现'error”接口时,为什么'fmt.Println”打印'错误错误”而不是整数值?

当类型实现'error”接口时,为什么'fmt.Println”打印'错误错误”而不是整数值?

Susan Sarandon
发布: 2024-12-09 07:46:07
原创
782 人浏览过

Why Does `fmt.Println` Print

为什么接口对于自定义类型的错误方法会返回“bad error”?

在 Go 中,可以使用接口为类型定义方法。当对象实现接口时,它为该接口定义的每个方法提供实现。

考虑以下示例:

type T int

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

func main() {
    var v interface{} = T(5)
    fmt.Println(v) // Output: "bad error"
}
登录后复制

在此示例中,定义了 Error 方法对于类型 T。但是,当使用 fmt.Println 打印值 v 时,输出是“错误错误”而不是预期的整数值 5。要理解此行为,让我们参考fmt 包文档:

  • 如果操作数实现了错误接口,则会调用 Error 方法将对象转换为字符串,然后根据动词(如果有)要求对其进行格式化。
  • 对于每个类似 Printf 的函数,还有一个不带格式的 Print 函数,相当于对每个函数说 %v操作数。

这种情况下使用 fmt.Println 函数,相当于 fmt.Printf("%v", v)。下面是对所发生情况的解释:

  • 由于 T 实现了错误接口,因此对值 v 调用 Error 方法。
  • Error 方法返回字符串“bad error”。
  • 然后该字符串由 %v 动词格式化并打印为输出。

要打印 v 的整数值,可以使用 fmt.Printf("%d",v)。

以上是当类型实现'error”接口时,为什么'fmt.Println”打印'错误错误”而不是整数值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板