Go by Example မြန်မာဘာသာ: Recover

Go မှာ recover built-in function ကို သုံးပြီး panic ကနေ recover နိုင်ပါတယ်။ recover က panic ကြောင့် ပရိုဂရမ် ရပ်တန့်သွားတာကို တားဆီးပြီး ဆက်လက်အလုပ်လုပ်စေနိုင်ပါတယ်။

ဒါဟာ ဘယ်နေရာမှာ အသုံးဝင်သလဲဆိုတဲ့ ဥပမာ: server တစ်ခုအနေနဲ့ client connection တစ်ခုမှာ critical error ဖြစ်တိုင်း crash ဖြစ်သွားတာမျိုး မလိုချင်ပါဘူး။ အဲဒီအစား၊ server က အဲဒီ connection ကိုပိတ်ပြီး တခြား client တွေကို ဆက်လက်ဝန်ဆောင်မှုပေးချင်မှာပါ။ တကယ်တော့ Go ရဲ့ net/http package က HTTP server တွေအတွက် ဒီအတိုင်းပဲ default လုပ်ထားပါတယ်။

package main
import "fmt"

ဒီ function က panic ဖြစ်စေပါတယ်။

func mayPanic() {
    panic("a problem")
}

recover ကို deferred function ထဲမှာပဲ ခေါ်ရပါမယ်။ လက်ရှိ function မှာ panic ဖြစ်တဲ့အခါ၊ defer က activate ဖြစ်သွားပြီး သူ့ထဲက recover call က panic ကို ဖမ်းယူ(catch) ပါလိမ့်မယ်။

func main() {

recover ရဲ့ return value က panic ခေါ်တဲ့အခါ ပေါ်လာတဲ့ error ပဲ ဖြစ်ပါတယ်။

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered. Error:\n", r)
        }
    }()
    mayPanic()

ဒီ code က run မှာ မဟုတ်ပါဘူး၊ ဘာလို့လဲဆိုတော့ mayPanic က panic ဖြစ်သွားလို့ပါ။ main ရဲ့ execution က panic ဖြစ်တဲ့နေရာမှာ ရပ်သွားပြီး defer လုပ်ထားတဲ့ closure မှာ ပြန်စပါတယ်။

    fmt.Println("After mayPanic()")
}
$ go run recover.go
Recovered. Error:
 a problem

နောက်ဥပမာ: String Functions.