Golang. Настройка сервера
Привет, подскажите, можно ли создать функцию которая будет автоматически проставлять стандартные заголовки, к примеру если у меня идёт обработка по адресу /api
123
http.HandleFunc("/api/count_users", countUsersHandler)
http.HandleFunc("/api/count_payments", countPaymentsHandler)
http.HandleFunc("/api/average_payments", averagePaymentHandler)
То во всех случаях нужно в каждой функции прописывать заголовки:
123
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
w.Header().Set("Content-Type", "application/json")
А также во всех случаях нужно конвертировать в json:
1
json.NewEncoder(w).Encode(response)
Можно ли создать функцию к примеру API и просто при каждом запросе на api автоматически это всё проставлять? Вот так:
1234567891011121314151617181920212223242526272829303132
func countPaymentsHandler(w http.ResponseWriter, r *http.Request) {
var count int
err := db.QueryRow("SELECT COUNT(*) FROM payments WHERE `status` = '1'").Scan(&count)
if err != nil {
http.Error(w, "Ошибка при выполнении запроса", http.StatusInternalServerError)
return
}
response := map[string]int{"count": count}
return response
}
func API(pattern string, handler func()) {
http.HandleFunc("/api/"+pattern, func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
response := handler
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
})
}
func main() {
initDB()
defer db.Close()
API("count_payments", countPaymentsHandler)
fmt.Println("Сервер запущен на http://localhost:8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
По дате
По рейтингу
Возьми любой роутер с поддержкой middleware (например, https://github.com/go-chi/chi ) и именно через механизм middleware подключай действия к группам обработчиков.
Больше по теме