Sobes.tech
Junior — Middle

Механизми ҳамкории функсияҳои panic, defer ва recover дар забони барномасозии Go-ро шарҳ диҳед.

sobes.tech AI

Ҷавоб аз AI

Дар Go, функсияҳои panic, defer ва recover бо идоракунии хатоҳо ва ҳолатҳои истисноӣ алоқаманданд.

  • panic — ба анҷоми ногаҳонии функсияи ҳозира сабаб мешавад ва равандрои "паника"-ро оғоз мекунад, ки дар зери стеки даъватҳо паҳн мешавад ва функсияҳои defer-и таъхирдоштаро даъват мекунад.
  • defer — иҷрои функсияро то баромадан аз функсияи ҳозира таъхир мекунад, ки имкон медиҳад тозакунӣ ё коркард пас аз panic анҷом дода шавад.
  • recover — имкон медиҳад, ки дар дохили функсияи таъхирдоштаро "гирд" карда, ба барнома қатъ накунад.

Масалан:

func намуна() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Аз panic барқарор шуд:", r)
        }
    }()

    fmt.Println("Пеш аз panic")
    panic("як чиз нодуруст шуд")
    fmt.Println("Ин иҷро намешавад")
}

Ин ҷо, panic хато меорад, defer бо recover онро дарбар мегирад ва барнома бе катифак идома медиҳад.