Sobes.tech
Junior — Middle

Оё имкон дорад, ки дар ҳар ҳолат пас аз паника иҷрои барномаи барқарор карда шавад, бо ёрии функсияи Recover?

sobes.tech AI

Ҷавоб аз AI

Не, функсия recover дар Go-да наметавон истифода шавад барои барқарор кардани иҷрои барнома дар ҳар ҳолат пас аз паника.

recover танҳо вақте кор мекунад, ки мустақиман дар дохили функсияи deferred (defer) даъват карда шавад. Агар паника рӯй диҳад ва дар стек-и даъватҳои ҳозира функсияи deferred бо даъвати recover бошад, он метавонад паникро дарёфт ва пешгирӣ кунад, ки барнома ба охир расад.

Аммо, агар recover дар функсияи deferred даъват нашуда бошад ё паника дар goroutine-и дигар рӯй диҳад, барнома бо хато анҷом меёбад.

Маслиҳат барои истифода:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Паника дарёфт шуд:", r)
        }
    }()
    panic("чизи нодуруст шуд")
}

Аз ин рӯ, recover механизми барои дарёфти паникаи маҳаллӣ аст, аммо воситаи умуми барои барқарор кардан дар ҳар ҳолат нест.