panika/odzyskać jest moralnym odpowiednikiem wyjątków try/catch. Istnieje powierzchowna różnica (składnia) i subtelna, ale ważna różnica w zamierzonym użyciu.
Najlepsze wyjaśnienie problemów z wyjątkami w ogóle to "Cleaner, more elegant, wrong" i jest to dobry przegląd zalet/wad wyjątków w porównaniu do zwracanych kodów błędów.
Go projektanci zdecydowali, że obsługa błędów poprzez zwrócenie kodów błędów z funkcji to idiomatyczny sposób postępowania, a język obsługuje wiele wartości zwracanych, aby uczynić go syntaktycznie łatwym. Chociaż zapewniany jest tryb panika/odzyskiwanie, różnica nie dotyczy funkcjonalności, ale zamierzonego zastosowania.
Inne języki ujawniające wyjątki promują ich stosowanie, aw praktyce są często używane (czasem nawet niewłaściwie używane).
Go zniechęca do użycia paniki/odzyskania. Możesz to zrobić, ale powinieneś to robić tylko w bardzo ograniczonych scenariuszach.
Jeśli spojrzysz na własną bibliotekę Go, większość uses of panic służy do sygnalizowania krytycznych błędów, wskazujących na błąd wewnętrzny (np. Błąd) w kodzie biblioteki lub wywołanie biblioteki z niewłaściwymi danymi (np. Przekazywanie danych nie json do json) funkcje dekodowania).
Ale jak artykuł, do którego się połączyłeś, wskazuje: "Konwencja w bibliotekach Go jest taka, że nawet jeśli pakiet wykorzystuje wewnętrznie panikę, jej zewnętrzny interfejs API nadal przedstawia jawne wartości zwracanych błędów."
To różni się od języków takich jak C#, Java, Python lub C++, gdzie wiele standardowych kodów bibliotecznych może generować wyjątki w celu sygnalizowania błędów. Te języki wymagają wyjątków. Go zniechęca do użycia paniki/odzyskania.
Podsumowując:
- idiomatyczne styl Go jest wykorzystanie kodów błędów, aby poinformować rozmówcę o błędach
- użycie panika/odzyskać tylko w rzadkich przypadkach:
- do „katastrofy” swój program gdy napotykamy wewnętrzną niespójność wskazującą na błędy w kodzie. Jest to w zasadzie pomoc debugowania.
- jeśli radykalnie upraszcza obsługę błędów w kodzie (ale jeśli kod ma być używany przez innych, nigdy wystawiać takie spanikowaniu do rozmówców)
W praktyce ważne jest, aby używać języka na idiomatyczne styl. W Go to zwracanie kodów błędów i unikanie paniki/odzyskanie. W języku C#, który używa wyjątków do sygnalizowania niektórych błędów.
Dziękuję, to jest odpowiedź, której się spodziewałem. – Archie
Autorzy Go nie zniechęcają do używania paniki (przynajmniej już jej nie ma). Na przykład, Go wiki wyraźnie popiera użycie panice na poziomie pakietu dla połączeń zagnieżdżonych. https://code.google.com/p/go-wiki/wiki/PanicAndRecover#Usage_in_a_Package –