美文网首页
go--panic--recover中error返回

go--panic--recover中error返回

作者: w_dll | 来源:发表于2021-12-03 21:05 被阅读0次

问题

参考文章
https://segmentfault.com/q/1010000007320304
由于golang没有try catch 捕获异常
通过defer 在panic前 提前把error 获取即可
其中error 需要制定返回变量

code

// 通过命令行获取数据库配置
func GetUimageDbByCmd(config_name string) (msql_cfg MySql, err error) {
    defer func() {
        if r := recover(); r != nil {
            //check exactly what the panic was and create error.
            switch x := r.(type) {
            case string:
                err = errors.New(x)
            case error:
                err = x
            default:
                err = errors.New("unknow panic")
            }
        }
    }()
    // 配置文件里读取所有的数据库信息
    mysql_list, err := GetUpHostImagesMySqlConfig(config_name)
    if err != nil {
        return MySql{}, err
    }
    end_tag := ""
    for index, value := range mysql_list {
        if (index % 2) == 0 {
            end_tag = "  "
        } else {
            end_tag = " \n"
        }
        fmt.Print(index, value.Name, value.Host, end_tag)
    }
    // 命令行交互
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("请输入选择的数据库: ")
    mysql_index, err := reader.ReadString('\n')
    if err != nil {
        // fmt.Fprintln(os.Stderr, err)
        return MySql{}, nil
    }
    mysql_index = strings.TrimSuffix(mysql_index, "\n")
    mysql_index_int, err := strconv.Atoi(mysql_index)
    if err != nil {
        return MySql{}, nil
    }
    msql_cfg = mysql_list[mysql_index_int]
    // 返回前 defer判断是否有 error
    return
}

相关文章

  • go--panic--recover中error返回

    问题 参考文章https://segmentfault.com/q/1010000007320304[https:...

  • go 异常处理

    error 接口声明如下: 创建error err:=errors.New("")//返回的是其返回的error类...

  • golang 错误处理

    Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示没有错...

  • Golang学习 - errors 包

    Go 语言使用 error 类型来返回函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表示未遇到...

  • Go error

    error Go 使用 error 类型来表示函数执行过程中遇到的错误,如果返回的 error 值为 nil,则表...

  • 聊聊golang的error包装

    序 本文主要研究一下golang的error包装 error error接口定义了Error方法,返回string...

  • Error Domain=NSCocoaErrorDomain

    使用NSJSONSerialization解析json文件时,返回以error信息Error Domain=NSC...

  • [小程序发起登录请求,返回Error: 响应错误,{"code"

    [小程序发起登录请求,返回Error: 响应错误,{"code":-1,"error":"ERR_REQUEST_...

  • 自定义Subscriber

    /** * 自定义Subscriber,将dialog、complete、error、错误返回抽取出来,实现类中只...

  • 错误处理

    有些方法通通过参数返回 error 的引用,使用这样的方法时应当检查方法的返回值,而非 error 的引用。 推荐...

网友评论

      本文标题:go--panic--recover中error返回

      本文链接:https://www.haomeiwen.com/subject/teebxrtx.html