Sobes.tech
Junior — Middle

Чаро зарур аст, ки функсияи recover дар дохили defer дар Go истифода шавад?

sobes.tech AI

Ҷавоб аз AI

Дар забони Go, функсияи recover барои дарёфти panic ва пешгирии қатъии барномаро истифода мебарад. Аммо, recover танҳо вақте кор мекунад, ки дар дохили функсияи defer даъват карда шавад.

Истифодаи recover дар дохили defer имкон медиҳад:

  • Ҳамеша бо бехатарӣ бо паник, масалан, сабт кардани хато ё тоза кардани захираҳо.
  • Давом додани иҷрои барнома пас аз паник, агар имконпазир бошад.

Масалан:

func safeFunction() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Аз паник барқарор шуд:", r)
        }
    }()
    // Код, ки метавонад паникро ба вуҷуд орад
    panic("чизи нодуруст шуд")
}

Агар recover дар хориҷи defer даъват карда шавад, он паникро намегирад ва барнома ба таври ногаҳонӣ қатъ мешавад. Аз ин рӯ, recover ҳамеша дар дохили defer ҷойгир карда мешавад барои идораи дурустии ҳолатҳои истисноӣ.