Привет!
Поделитесь рецептом, как правильно собирать и обрабатывать ошибки в web приложении на Go.
Для себя пока нашел такой вариант, не уверен что это хороший пример:
использую библиотеку
https://github.com/golang/glog
просто в любом месте приложения ставлю
if err != nil {
glog.Fatalln(err)
}
и в браузере получаю 500 Server internal error, а в логах:
F1106 07:15:27.296630 02050 services.go:42] My Error
где видно когда и где произошла ошибка.
(! плохой способ я выбрал - upd внизу)
Еще нашел информацию вот здесь
https://sourcegraph.com/blog/google-io-2014-buildi...
Handler functions: We define our handlers with an error return value, and we use a simple wrapper function to make them implement http.Handler. This means we can centralize error handling instead of having to format error messages and pass them to the http.Error for each possible error. Our handler functions look like:
func serveXYZ(w http.ResponseWriter, r *http.Request) error { ... }
Попробовал. Но собирать ошибку и поднимать ее по иерархии до самого верхнего уровня как-то не очень красивы в итоге получается.
Какие есть рецепты у вас? Что можете сказать по этому поводу?
upd: Разработку я веду при помощи gin, который отвечает за перезагрузку сервера. Поэтому получилось что после glog.Fatal сервер вырубался по os.Exit(255), а gin врубал его обратно. Мне казалось что просто завершается текущий запрос. Попробовал запустить сервер напрямую и действительно на строчке с ошибкой сервер остановился. Не гуд :(.
pps: сделал для себя открытие проект с несколькими файлами в одном package нельзя просто так оказывается запустить с помощью go run server.go, надо делать go run *.go ! О как :). До этого момента подгрузкой файлов из одного package занимался gin :)