根据四十四十对这个问题的答复:
fmt.Sprint(e)将调用e.Error()将值转换e为 a string。如果Error()方法调用fmt.Sprint(e),则程序将递归,直到内存不足。
您可以通过将 the 转换为e没有StringorError方法的值 来中断递归。
这对我来说仍然很困惑。为什么 fmt.Sprint(e) 调用 e.Error() 而不是 String()?我尝试使用 Stringer 接口,这是我的代码:
package main
import (
"fmt"
"math"
)
type NegativeSqrt float64
func (e NegativeSqrt) Error() string {
fmt.Printf(".")
return fmt.Sprint(e)
}
func (e NegativeSqrt) String() string {
return fmt.Sprintf("%f", e)
}
func Sqrt(x float64) (float64, error) {
if x < 0 {
return 0, NegativeSqrt(x)
}
return math.Sqrt(x), nil
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(Sqrt(-2))
}
慕码人8056858
MMMHUHU
牛魔王的故事
相关分类