Ужасът (panic)1 обикновено настъпва, когато се случи
нещо неочаквано лошо. Използва се най-често за бързо
приключване на програмата при неочаквана грешка,
която не би трябвало да настъпи при обичайното
изпълнение, или когато не сме готови да обработим
благополучно някакво състояние.
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 се извиква, когато няма смисъл програмата да
продължава или няма как да продължи след тази грешка.
Следващ пример: Отлагане.