Sobes.tech
Middle

Mi történik, ha elindítasz egy goroutine-t és benne hívod a panic-et? A goroutine leáll vagy az egész alkalmazás?

sobes.tech MI

Válasz az MI-től

Ha egy panic fordul elő egy goroutine-ban, akkor az adott goroutine leáll, de az egész alkalmazás nem fog automatikusan bezárulni. A panic egy goroutine-ban nem okozza az összes goroutine vagy a program leállását, kivéve, ha eléri a gyökér szintet és kezeletlen marad.

A program váratlan leállásának elkerülése érdekében használhatod a recover-t ugyanabban a goroutine-ban vagy a hívó függvényben, hogy elfogd és kezeld a pánikot.

Példa:

func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Goroutine-ban elfogott pánik:", r)
        }
    }()
    panic("valami rosszul sült el")
}()

Ebben a példában a pánik nem fogja az egész alkalmazás leállítását eredményezni, hanem a goroutine belsejében lesz kezelve.