美文网首页
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://www.haomeiwen.com/subject/teebxrtx.html