登录
首页 >  Golang >  Go问答

为何在 Go 中添加 Error() 方法会影响程序执行?

来源:stackoverflow

时间:2024-02-24 13:21:29 263浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《为何在 Go 中添加 Error() 方法会影响程序执行?》,涉及到,有需要的可以收藏一下

问题内容

下面的程序打印“2.5”

package main

import (
    "fmt"
)

type myFloat64 float64

// func (f myFloat64) Error() string {
//     return fmt.Sprintf("Error with %v", f)
// }

func main() {
    var a myFloat64 = myFloat64(2.5)
    fmt.Printf("%v\n", a)
}

有趣的是,当我取消注释 error() 方法时,程序不再打印“2.5”

问题: 为什么添加 error() 方法会改变程序行为?非常感谢指向解释此行为的 go 语言规范的指针。


正确答案


myfloat64实现error接口:

type error interface {
  Error() string
}

fmt.println() 会将 a 视为 error 值,并通过调用 a.error() 打印错误消息,该操作执行 fmt.sprintf("error with %v", f)。但 sprintf 的行为与 println 类似,它也将 f 视为 error 值并调用 error()。这种递归会无限进行并导致堆栈溢出。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《为何在 Go 中添加 Error() 方法会影响程序执行?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>