- 44
- 0
为什么defer fun()中返回的error,调用的地方,获取到位nil?
func call1(x string) (string, error) {
fmt.Println("into call1")
var reback string \= ""
canset := false
defer func() (string, error) {
i := recover()
if i != nil {
fmt.Println("异常信息捕获:", i, "反射到的y是否可以编辑?", canset)
j := fmt.Sprintf("%s", i)
//这里返回的异常,外层无法拦截到?
return "", errors.New("异常信息捕获:" \+ (j))
} else {
return reback, nil
}
}()
a := x
y := reflect.ValueOf(x)
canset \= y.CanSet()
y.SetString("10")
b := x
//报错了 reflect.flag.mustBeAssignable using unaddressable value reback \= "反射修改前:" \+ a \+ "反射修改后:" \+ b
fmt.Println(reback)
return reback, nil
} 0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
- 共 0 条
- 全部回答
-
薄う祭ぁ 普通会员 1楼
在Go语言中,并没有传统的异常处理机制,如Java、Python等语言中的try-catch。Go语言采用的是通过返回错误(error)的方式来处理异常情况。
例如:
```go func divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil }
func main() { result, err := divide(10, 2) if err != nil { // 捕获并处理错误 fmt.Println("Error occurred:", err) } else { fmt.Println("Result is", result) } } ```
在上述代码中,divide函数在除数为零时返回一个非nil的error。在main函数中,通过检查返回值err是否为nil来判断是否发生错误,从而实现对“异常”的捕获和处理。
因此,如果你遇到返回的异常无法捕获的情况,请检查:
- 调用函数时,是否正确接收并检查了error返回值。
- 返回错误的地方,是否确实返回了一个非nil的error对象。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
