defer闭包调用err的识别问题
来源:12-5 gopath开发模式和go modules开发模式对比

0沉默使者0
2023-02-25
func deferDemo() error {
err := createResource1()
if err != nil {
return ERR_CREATE_RESOURCE1_FAILED
}
defer func() {
if err != nil {
destroyResource1()
}
}()
err = createResource2()
if err != nil {
return ERR_CREATE_RESOURCE2_FAILED
}
defer func() {
if err != nil {
destroyResource2()
}
}()
err = createResource3()
if err != nil {
return ERR_CREATE_RESOURCE3_FAILED
}
defer func() {
if err != nil {
destroyResource3()
}
}()
err = createResource4()
if err != nil {
return ERR_CREATE_RESOURCE4_FAILED
}
return nil
}
老师,我想问一下假如createResource1和createResource3在调用时err的返回值都不为空,那么在后续的defer过程中,是如何区分哪个defer里的err对应之前的1和3?因为这个err属于闭包的外部变量,但是在外面的时候err是被重复赋值的,所以我搞不明白它怎么判断哪个err对应哪个函数。
1回答
-
bobby
2023-02-27
你这里createResource1和createResource3用的是同一个变量, 当createResource3执行完以后createResource1的err就被覆盖了,何来如何区别的问题?,谁后执行就是谁的
022023-02-28
相似问题