@NubasLol

Как избавиться от такого дублирования кода?

Скажем метод контроллера, и есть целых 4 места где может быть ошибка. И везде приходится писать ее обработку

if err != nil {
		log.Println(err)
		internalhttp.NewJsonResponse().ErrorResponse(w, err)
		return
	}


Очень портит визуально котроллеры и читаемость кода
  • Вопрос задан
  • 222 просмотра
Решения вопроса 1
Можно воспользоваться panic/recover и модифицировать возвращаемые параметры(если все-таки нужно вернуть ошибку)

func myFunc() (err error) {
	defer func() {
		if r := recover(); r != nil {
			log.Println(r)
			internalhttp.NewJsonResponse().ErrorResponse(w, r)
			err = r.(error)
		}
	}()
	
	...
	
	if err := myOtherFunc(); err != nil {
		panic(err)
	}

	return
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Такова философия go - явня обработка ошибок. Можно конечно и писать на panic-recover, но будет не менее уродливо и не факт что производительно. Просто привыкните, примите как особенность языка.
Можете вынести идентичные строки в некую функцию ErrorHandler.
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
На Go много не кодил, но языком интересуюсь.
Все знакомые, кто пишет на Go, говорят, что иначе никак.
Язык изначально задумывался "тупым", но быстрым.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы