Przede wszystkim, kiedy masz pytanie „jak to jest używane w praktyce”, dobrym sposobem na rozpoczęcie jest przeszukanie kodu źródłowego Go (lub dowolnej wystarczająco dużej bazy kodu Go, tak naprawdę) i dokumentacji pakietu w celu uzyskania odpowiedzi.
Teraz os.Exit
i panic
są zupełnie inne. panic
jest używany, gdy program lub jego część osiągnęły stan niemożliwy do odzyskania.
Gdy panic
jest wywoływana, w tym niejawnie w przypadku błędów czasu wykonywania, takich jak indeksowanie wycinka poza granicami lub niepowodzenie potwierdzenia typu, natychmiast zatrzymuje wykonywanie bieżącej funkcji i rozpoczyna rozwijanie stosu goroutine, uruchamiając po drodze wszelkie odroczone funkcje. Jeśli to odwijanie osiągnie szczyt stosu gorutyny, program umiera.
os.Exit
jest używany, gdy trzeba natychmiast przerwać program , bez możliwości przywrócenia lub wykonania odroczonej instrukcji czyszczenia, a także zwrócić kod błędu (który inne programy mogą wykorzystać do zgłoszenia tego, co się stało). Jest to przydatne w testach, gdy już wiesz, że po tym, jak jeden test się nie powiedzie, drugi również się nie powiedzie, więc równie dobrze możesz teraz po prostu zakończyć. Można tego również użyć, gdy program zrobił wszystko, co musiał, a teraz musi tylko zakończyć, tj. Po wydrukowaniu komunikatu pomocy.
W większości przypadków nie będziesz używać panic
(powinieneś error
zamiast tego zwrócić ) i prawie nigdy nie potrzebujesz os.Exit
poza niektórymi przypadkami w testach i do szybkiego zakończenia programu.
panic
jest używany do kończenia pracy w przypadku błędu, wyłącznie dlatego, że jest łatwy do zrozumienia i eliminuje importowanie jakichkolwiek innych pakietów. To nie znaczy, że jest dobry, lub idiomatyczne praktykę! . To tylko urządzenie oszczędzające miejsce, na przykład kod. IRL rezerwujepanic
na bardzo szczególne sytuacje.