游览练习: Errors: using Sprintf with %f to avoid infinite recursion

标签 go

我正在完成 Go 之旅,在错误练习中提到,在 Error 函数中调用 Sprint(f) 将导致一个问题,即无限循环。此处解释了为什么会发生这种情况:Error, infinite loop

在我的第一个实现中,我使用了带有 %f 动词的 Sprintf:

func (e ErrNegativeSqrt) Error() string {
    return fmt.Sprintf("cannot Sqrt negative number: %f", e)
}

这似乎避免了这个问题,我想知道这是否是因为 %f 动词期待一个 float ,所以它强制它将 e 视为 float ?游览中提到assignment requires explicit conversion ,但是我认为这不会影响这种情况?

或者我完全偏离了目标,这里发生了其他事情?

最佳答案

该无限循环情况仅适用于 vsxX q.

请参见此处:https://github.com/golang/go/blob/6f51082da77a1d4cafd5b7af0db69293943f4066/src/fmt/print.go#L615

关于游览练习: Errors: using Sprintf with %f to avoid infinite recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450813/

相关文章:

走。接口(interface)中单值上下文中的多值

go - 找不到包 "google.golang.org/protobuf/cmd/protoc-gen-go"

我可以在 Google App Engine 上使用 CGo 吗?

go - 调试时出错 “plugin was built with a different version of package” 失败

go - 关于 golang 中的 `&MyType{}` 模式的任何文档/文章?

go - 将 Sudosh 与 Golang 结合使用

go - golang map 未添加元素

go - panic : runtime error: index out of range 1

go - 在kafka中为同一主题创建多个消费者

session - 如何使用 revel 从 session 中删除值