Go by Example: Panic

panic odatda nimadir kutilmaganda noto’g’ri ketganini bildiradi. Asosan biz undan oddiy ish jarayonida yuz bermasligi kerak bo’lgan yoki biz to’g’ri ishlashga tayyor bo’lmagan xatolarda tezda to’xtash uchun foydalanamiz.

package main
import (
    "os"
    "path/filepath"
)
func main() {

Biz bu saytda kutilmagan xatolarni tekshirish uchun panic dan foydalanamiz. Bu saytda panic qilish uchun mo’ljallangan yagona dastur.

    panic("a problem")

panic ning keng tarqalgan ishlatilishi - funksiya biz qanday ishlashni bilmaydigan (yoki istamaydigan) xato qiymatini qaytarsa, ishni to’xtatishdir. Mana yangi fayl yaratishda kutilmagan xato olsak, panic qilishga misol.

    path := filepath.Join(os.TempDir(), "file")
    _, err := os.Create(path)
    if err != nil {
        panic(err)
    }
}

Bu dasturni ishga tushirish uni panic qildiradi, xato xabari va goroutina izlarini chop etadi va nolga teng bo’lmagan status bilan chiqadi.

main dagi birinchi panic ishga tushganda, dastur kodning qolgan qismiga yetmasdan chiqadi. Agar dastur vaqtinchalik fayl yaratishga urinishini ko’rmoqchi bo’lsangiz, birinchi panic ni izohga oling.

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

E’tibor bering, ko’p xatolarni qayta ishlash uchun istisnolardan (exceptions) foydalanadigan ba’zi tillardan farqli o’laroq, Go da imkon qadar xatoni bildiruvchi qaytariladigan qiymatlardan foydalanish idiomatikdir.

Keyingi misol: .