问题
参考文章
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
}
网友评论