Стандартный способ: w.Header().Set("Content-Type", "application/json"), w.WriteHeader(http.StatusOK), json.NewEncoder(w).Encode(data). Порядок важен — Header перед WriteHeader, WriteHeader перед Write. После WriteHeader нельзя менять headers. Хорошая практика — написать хелпер respondJSON(w, status, data) и respondError(w, status, msg), чтобы не дублировать код в каждом хэндлере. Не забудь проверить ошибку Encode — если структура содержит channel или func, упадёт.