回答

收藏

如何在golang的字符串中获取错误消息?

技术问答 技术问答 177 人阅读 | 0 人回复 | 2023-09-12

我提到了这个问题 - os.Error - string value Golang,但这在我的情况下不起作用。
3 _( C+ |: ^8 Y- `( l7 W# j
    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 }
    7 T  s/ ~. E& Q8 W# O/ k( K
因为err例如,如果分析逻辑失败,我需要抛出错误的信息,它会自动抛出错误。这就是我需要抓住的错误。我只是举个例子来解释这一点- 无论运行时异常是什么,我都需要捕获它并作为err返回值传递。
8 p9 Y' q* s7 q' |! `如何做到这一点?9 U0 W4 k8 |+ L
                                                                8 k0 v# U# X( W& z2 f8 ~
    解决方案:                                                               
: A+ |; `' A1 W! d8 \7 B) P, n' n                                                                使用errors创造新的错误。4 d+ s5 N/ i" n
    err = errors.New("an error")
    3 z: }# M3 A% [0 i4 B
通过访问err.Error()或使用fmt包函数(例如fmt.Println(err)),返回的错误可视为字符串。
4 @/ B2 l% E9 @* A. Jrecover除非您我真的知道我在做什么,否则,不要使用它。当它们出现时,返回所有错误并处理它们是很常见的。
; ]& g7 u+ ]) X1 @3 P9 v( O编辑:
; v; ]7 K4 U% S重新阅读你的问题,你似乎正试图从可能失败的类型断言中恢复过来。在这种情况下,建议使用逗号,好的习语(在文档之前的链接部分中提到),这意味着:) J9 {3 z' i! F3 F$ d2 [% Y4 x
如果类型断言失败,[接收者变量] 仍然存在并且是[任何断言] 类型,但它将具有零值......”
- d* @. H, B1 P: u' k: D8 V测试 aninterface{}其实是不是真的?float64直接类型断言的简单例子,如果失败(而不是恐慌)会导致自定义错误:2 Z# r, ?- B4 ~  P! V0 Y- D2 n6 H- I# @
n))}func main(){     / / Successful   .0 is float64    err := assertFloat64(1024.0)    if err != nil              fmt.Println(err)     Failure    // "foo" isn't float64    err = assertFloat64("foo")    if err != nil              fmt.Println(err)  code]n))}func main() {    // Successful    // 1024.0 is float64    err := assertFloat64(1024.0)    if err != nil {        fmt.Println(err)    }    // Failure    // "foo" isn't float64    err = assertFloat64("foo")    if err != nil {        fmt.Println(err)    }}[/code]将打印:
  \8 V3 n% p* T  O+ o1024.000000 is float647 N) M6 [- |' v7 e1 J4 `) `
could not assert that “foo” is float64.1 X1 i% @2 v* E, |9 K7 L* h5 k' `/ ^
Playground
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则