Go в примери: Ужас

Ужасът (panic)1 обикновено настъпва, когато се случи нещо неочаквано лошо. Използва се най-често за бързо приключване на програмата при неочаквана грешка, която не би трябвало да настъпи при обичайното изпълнение, или когато не сме готови да обработим благополучно някакво състояние.


  1. Вижте https://go.dev/blog/defer-panic-and-recover
package main
import (
    "os"
    "path/filepath"
)
func main() {

Ще ползваме panic в този сайт, за да проверяваме за неочаквани грешки. Това е единствената програма в сайта, направена да се ужаси.

    panic("препятствие!")

panic обичайно ползваме да прекратим изпълнението на функция, ако тя върне стойност, която не знаем какво да правим или как да обработим. Ето пример как се ужасяваме, ако получим неочаквана грешка при създаване на файл.

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

Ако пуснем тази програма, тя ще се ужаси, ще изведе грешка и проследяване на гозадачата, в която се е случило това, след което ще излезе с ненулево състояние.

Когато програмата достигне до извикването на първата panic в main, програмата излиза, без да изпълни остатъка от кода. Ако искате да видите, как програмата се опитва да създаде временен файл, коментирайте първото извикване на panic.

$ go run panic.go
panic: препятствие!
goroutine 1 [running]:
main.main()
    /home/berov/opt/dev/gobyexample/examples/panic/panic.go:20 +0x25
exit status 2
...

Забележете, че за разлика от някои езици, ползващи изключения1 за управление на много грешки в Го е прието да се връща стойност от вида данни за грешки error, като така се обозначават състояния, които могат да бъдат обработени и програмта да продължи. panic се извиква, когато няма смисъл програмата да продължава или няма как да продължи след тази грешка.


  1. exception – изключение. В Java това е ключова дума, част от езика. В Python ключовата дума е except.

Следващ пример: .