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

panic ဆိုတာ ပုံမှန်အားဖြင့် တစ်ခုခု မမျှော်လင့်ဘဲ မှားယွင်းသွားတယ်ဆိုတာကို ဆိုလိုပါတယ်။ အများအားဖြင့် ပုံမှန်အလုပ်လုပ်နေစဉ် မဖြစ်သင့်တဲ့ error တွေ ဖြစ်လာတဲ့အခါ သို့မဟုတ် ကျွန်တော်တို့က gracefully handle လုပ်ဖို့ မပြင်ဆင်ထားတဲ့ error တွေဖြစ်လာတဲ့အခါ fail fast ဖြစ်သွားအောင် သုံးလေ့ရှိပါတယ်။

package main
import "os"

ဒီ website တစ်ခုလုံးမှာ မမျှော်လင့်ထားတဲ့ error တွေကို စစ်ဆေးဖို့ panic ကို သုံးပါမယ်။ ဒီပရိုဂရမ်က website ပေါ်မှာ panic ဖြစ်အောင် ရည်ရွယ်ချက်ရှိရှိ ဒီဇိုင်းလုပ်ထားတဲ့ တစ်ခုတည်းသော ပရိုဂရမ်ပါ။

func main() {
    panic("a problem")

Panic ကို အသုံးများတဲ့နေရာတစ်ခုကတော့ function တစ်ခုက ကျွန်တော်တို့ ဘယ်လိုကိုင်တွယ်ရမှန်းမသိတဲ့ (သို့မဟုတ် ကိုင်တွယ်ချင်စိတ်မရှိတဲ့) error value တစ်ခုကို ပြန်ပေးလာတဲ့အခါ ပရိုဂရမ်ကို ရပ်တန့်ဖို့ပါ။ ဒီမှာဆိုရင် file အသစ်တစ်ခု ဖန်တီးတဲ့အခါ မမျှော်လင့်ထားတဲ့ error တစ်ခုရရင် panic ဖြစ်စေတဲ့ ဥပမာပါ။

    _, err := os.Create("/tmp/file")
    if err != nil {
        panic(err)
    }
}

ဒီပရိုဂရမ်ကို run လိုက်ရင် panic ဖြစ်သွားပြီး၊ error message နဲ့ goroutine trace တွေကို ပြပေးပါလိမ့်မယ်။ ပြီးတော့ non-zero status နဲ့ exit ဖြစ်သွားပါလိမ့်မယ်။

main ထဲက ပထမဆုံး panic က အလုပ်လုပ်သွားတဲ့အခါ၊ ပရိုဂရမ်က ကျန်တဲ့ code တွေကို မရောက်တော့ဘဲ ထွက်သွားပါလိမ့်မယ်။ အကယ်၍ ပရိုဂရမ်က temp file တစ်ခု ဖန်တီးဖို့ ကြိုးစားတာကို မြင်ချင်ရင် ပထမဆုံး panic ကို comment out လုပ်ထားလိုက်ပါ။

$ go run panic.go
panic: a problem
goroutine 1 [running]:
main.main()
    /.../panic.go:12 +0x47
...
exit status 2

သတိပြုရမှာက တချို့ language တွေမှာ exception တွေကို error အများစုကို handle လုပ်ဖို့ သုံးကြပေမယ့်၊ Go မှာတော့ ဖြစ်နိုင်သမျှနေရာတိုင်းမှာ error-indicating return value တွေကို သုံးတာက ပုံမှန်လုပ်နည်းလုပ်ဟန် ဖြစ်ပါတယ်။

နောက်ဥပမာ: Defer.