Top.Mail.Ru
Ответы

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)) 
} 
По дате
По рейтингу
Аватар пользователя
Новичок
7мес

Возьми любой роутер с поддержкой middleware (например, https://github.com/go-chi/chi ) и именно через механизм middleware подключай действия к группам обработчиков.