Я кодирую веб-приложение в Go, а в то время как различные библиотеки мультиплексоров предоставляют способ установки пользовательского обработчика ошибок 404, нет ничего для других кодов ошибок 4xx и 5xx.Переопределение интерфейса ResponseWriter для улавливания ошибок HTTP
Одно из предложений заключается в том, чтобы переопределить метод WriteHeader в интерфейсе ResponseWriter и проверить код состояния, но я смущен тем, как это было бы фактически записано (переопределение методов ResponseWriter до вывода). Один из возможных примеров можно найти на странице negroni package.
Будет ли это правильным способом обслуживания настраиваемого шаблона для ошибок 4xx и 5xx? Может ли кто-нибудь привести пример того, как это можно реализовать?
Update
Большое спасибо Давиду и elithrar их ответов и кода. Структура Interceptor
, которую Дэвид закодировал, может использоваться в оболочке для серверного мультиплексирования, как показывает elithrar в комментариях. Для тех, кто ищет дополнительные объяснения относительно того, почему и как это работает, this section from astaxie's book дает очень хорошую информацию о работе пакета net/http, а также просматривает server.go source code из пакета net/http.
Большое спасибо за пример! Я думаю, что я понимаю, что вы имеете в виду, когда мои обработчики могут писать конкретные ошибки 4xx и 5xx для маршрутов в соответствии с логикой приложения, не так ли? Мое беспокойство, однако, было бы ошибками, генерируемыми самим сетью/http-пакетом, и просто соблюдением всех, совместимых с одной страницей ошибок. Где именно у меня есть '& Interceptor {origWriter: nil}', поэтому я могу заменить nil на фактический 'http.ResponseWriter'? Я думаю, что он пойдет в функцию «ServeHTTP» для моего собственного «http.Handler», но не уверен, как это будет выглядеть (или если это так). Еще раз спасибо! – eclipse1121
Не могли бы вы показать, что он используется в 'main()' с простым вызовом 'http.Handle', например ' http.Ручка ("/ test", InterceptHandler) ' (если это правильный путь)? – eclipse1121
@ eclipse1121 Оберните весь мукс с помощью некоторого промежуточного программного обеспечения, которое заменит ResponseWriter по умолчанию на InterceptWriter - http://play.golang.org/p/esiiY7p-CC – elithrar