回答

收藏

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

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

我提到了这个问题 - os.Error - string value Golang,但这在我的情况下不起作用。
4 u8 ~8 N" M8 J; u+ e+ ^
    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 }
      ?9 H2 J5 f. r, J8 O1 j
因为err例如,如果分析逻辑失败,我需要抛出错误的信息,它会自动抛出错误。这就是我需要抓住的错误。我只是举个例子来解释这一点- 无论运行时异常是什么,我都需要捕获它并作为err返回值传递。
7 u) e& V1 M( v- _' N" w% i如何做到这一点?
6 M0 Q$ M: G& s4 M                                                               
& l8 ?/ d. F6 I! v2 i7 K    解决方案:                                                                5 b: I( e* p. w8 d5 L. `5 J
                                                                使用errors创造新的错误。2 M3 v+ W; o0 U; p& U
    err = errors.New("an error")
    ; J/ `: T- Q5 J% ~9 t1 P
通过访问err.Error()或使用fmt包函数(例如fmt.Println(err)),返回的错误可视为字符串。% ~/ @, z$ D  B# |4 n" o
recover除非您我真的知道我在做什么,否则,不要使用它。当它们出现时,返回所有错误并处理它们是很常见的。  l6 w, G. _: Z- B! {+ U5 E# j
编辑:
) Q& V1 _- T; N5 W% z! O重新阅读你的问题,你似乎正试图从可能失败的类型断言中恢复过来。在这种情况下,建议使用逗号,好的习语(在文档之前的链接部分中提到),这意味着:3 g  {- v8 e) N
如果类型断言失败,[接收者变量] 仍然存在并且是[任何断言] 类型,但它将具有零值......”
7 Y+ L$ i3 e& ~; x( \测试 aninterface{}其实是不是真的?float64直接类型断言的简单例子,如果失败(而不是恐慌)会导致自定义错误:! T  I* u8 ?3 |* b0 k" F
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 Y! @' _4 s5 Z1024.000000 is float64
6 k2 y" F3 J/ \: n0 j* `could not assert that “foo” is float64., p8 ~. ]. }* U# i! ?
Playground
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则