golang - 在go中recover之后怎么返回error
本文介绍了golang - 在go中recover之后怎么返回error的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
package main
import (
"fmt"
"math"
)
func main() {
_, err := IntFromInt64(math.MaxInt32 + 1)
if err != nil {
fmt.Println(err)
}
}
func ConvertInt64ToInt(i64 int64) int {
if math.MinInt32 <= i64 && i64 <= math.MaxInt32 {
return int(i64)
}
panic("can't convert int64 to int")
}
func IntFromInt64(i64 int64) (int, error) {
defer func() {
if err := recover(); err != nil {
return 0, fmt.Errorf("%v", err)
}
}()
i := ConvertInt64ToInt(i64)
return i, nil
}
defer func()中recover之后怎么返回
解决方案
package main
import (
"errors"
"fmt"
"math"
)
func main() {
_, err := IntFromInt64(math.MaxInt32 + 1)
if err != nil {
fmt.Println(err)
}
}
func ConvertInt64ToInt(i64 int64) int {
if math.MinInt32 <= i64 && i64 <= math.MaxInt32 {
return int(i64)
}
panic("can't convert int64 to int")
}
func IntFromInt64(i64 int64) (i int, err error) {//这里
defer func() {
if err2 := recover(); err2 != nil {
i = 0//这里
err = errors.New("ttt")//这里
}
}()
i = ConvertInt64ToInt(i64)
return i, nil
}
主要思想:return之前利用defer修改返回变量(提前确定为i和err)的值
这篇关于golang - 在go中recover之后怎么返回error的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文