我提到了这个问题 - os.Error - string value (Golang) ,但这对我来说不起作用。
func (t Trans) TicketQty() (intQty int, err string) {
defer func() {
str := recover()
if(str != nil){
err = "an error"
}
}()
Qty := t.TransObject["qty"].(map[string] interface{})["ticket fv"].(float64)
intQty = 10
return
}
在那 err
我需要抛出的错误消息,例如,如果解析逻辑失败,它会自动抛出错误。那是我需要捕获的错误。我只是为了举例说明这一点——无论运行时异常是什么,我都需要捕获它并在返回时作为 err
传递。
如何实现?
原文由 shanmugharaj 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
errors
包创建新错误。可以通过访问
err.Error()
或使用fmt
包函数(例如fmt.Println(err)
)将返回的错误视为字符串。不要使用
recover
除非你 _真的知道你在做什么_。返回所有错误并在它们出现时处理它们是惯用的。有关详细信息,请参阅 Go 博客上的 错误处理和 Go 以及 Defer、Panic 和 Recover 。
编辑:
重新阅读您的问题,您似乎正在尝试从可能失败的 类型断言 中恢复。在这种情况下,建议使用“comma, ok”成语(在文档的先前链接部分中提到),它(略微释义更一般)意味着:
通过类型断言测试
interface{}
是否实际上是float64
的简单示例,如果失败则生成自定义错误(而不是恐慌):将打印:
操场