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对应哪个函数。
登录后可查看更多问答,登录/注册