Привет! Сегодня я расскажу о том, как создать веб-сервер на Golang с использованием Middleware `RequestIDMiddleware`, который будет добавлять информацию из заголовка ″X-Request-ID″ в контекст запроса и использовать эту информацию в самом обработчике.Первым делом, необходимо установить Go и настроить его рабочую среду. После этого мы можем приступить к созданию нашего сервера.Для начала, создадим файл main.go и добавим следующий код⁚
go
package main
import (
″fmt″
″net/http»
)
type RequestIDMiddleware struct {
next http.Handler
}
func (m RequestIDMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
requestID ⁚ r.Header.Get(″X-Request-ID″)
if requestID ″″ {
http.Error(w, ″RequestID not found″, http.StatusBadRequest)
return
}
ctx ⁚ r.Context
ctx context.WithValue(ctx, ″requestID″, requestID)
r r.WithContext(ctx)
m.next.ServeHTTP(w, r)
}
type HelloHandler struct{}
func (h HelloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
requestID ⁚ r.Context.Value(″requestID″).(string)
response ⁚ fmt.Sprintf(″Hello! RequestID⁚ %s″, requestID)
fmt.Fprintln(w, response)
}
func main {
mux ⁚ http.NewServeMux
mux.Handle(″/», RequestIDMiddleware{HelloHandler{}})
fmt.Println(″Server started on http://localhost:8080″)
http.ListenAndServe(″⁚8080″, mux)
}
Давайте разберемся, что происходит в нашем коде. Вначале мы объявляем структуру `RequestIDMiddleware` с методом `ServeHTTP`, который будет добавлять информацию из заголовка ″X-Request-ID″ в контекст запроса. Если заголовок не передан, то мы возвращаем ошибку с сообщением ″RequestID not found″.
Затем у нас есть структура `HelloHandler` с методом `ServeHTTP`, который обрабатывает запрос и извлекает значение `requestID` из контекста запроса. Мы формируем ответ с помощью этого значения и выводим его.
В функции `main` мы создаем новый маршрутизатор `mux` с помощью `http.NewServeMux`. Затем мы добавляем наш Middleware `RequestIDMiddleware` перед нашим обработчиком `HelloHandler` с помощью `mux.Handle(″/»`, `RequestIDMiddleware{HelloHandler{}})`.Последняя строка кода запускает наш сервер на порту 8080 и выводит сообщение о том, что сервер успешно запущен.Теперь мы можем скомпилировать и запустить наш сервер. В терминале перейдите в папку проекта и выполните следующую команду⁚
shell
go run main.go
После запуска сервера вы можете отправить GET-запрос на адрес ″http://localhost:8080″ с заголовком ″X-Request-ID″ со значением ″12345″. Вы должны получить ответ ″Hello! RequestID⁚ 12345″. Если заголовок ″X-Request-ID″ не будет передан, вы получите ответ ″RequestID not found″.
Вот и всё! Теперь у вас есть пример веб-сервера на Golang с использованием Middleware `RequestIDMiddleware`, который добавляет информацию из заголовка ″X-Request-ID″ в контекст запроса и использует эту информацию в обработчике.
Удачи в вашем программировании на Golang!