Go предоставляет два способа обработки ошибок, но я не уверен, какой из них использовать.
Предполагая, что я реализую классическую функцию ForEach
, которая принимает срез или карту в качестве аргумента. Чтобы проверить, прошел ли итерабельность, я мог бы сделать:
func ForEach(iterable interface{}, f interface{}) {
if isNotIterable(iterable) {
panic("Should pass in a slice or map!")
}
}
или
func ForEach(iterable interface{}, f interface{}) error {
if isNotIterable(iterable) {
return fmt.Errorf("Should pass in a slice or map!")
}
}
Я видел некоторые обсуждения, в которых говорилось, что panic()
следует избегать, но люди также говорят, что если программа не может восстановиться после ошибки, вы должны panic()
.
Какой я должен использовать? И какой главный принцип для выбора правильного?