Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+687новых вакансий за сутки·55 254вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 791
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python7 042
  • Облачные технологии6 770
  • QA вакансии2 176
  • Android1 199
  • Инженер данных940
  • Продакт-менеджер435

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

DevOps и инфраструктура

  • Kubernetes4 025
  • Linux-инфраструктура3 060
  • Terraform / IaC2 214
  • DevOps вакансии2 110
  • Мониторинг и Observability1 106
  • CI/CD872
  • SRE341
  • Кибербезопасность90

Аналитика и данные

  • Аналитик данных555
  • Data Scientist513
  • Бизнес-аналитик431
  • Системный аналитик65

Другие направления

  • Проджект-менеджер160
  • UI/UX дизайн77
  • Ручное тестирование14

По регионам

  • Вакансии в США29 375
  • Вакансии в Европе11 048
  • Работа в России3 627
  • Вакансии в Канаде2 514

По формату

  • Удалённые вакансии48 640
  • Релокация в США29 375
  • Гибридная работа5 790
  • Офисная работа4 553

По уровню

  • Senior вакансии25 029
  • Middle вакансии13 245
  • Junior вакансии4 377

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме EchoВсе вопросы
EchoJuniorКодинг

Как возвращать JSON, XML и другие форматы ответа в Echo?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Echo предоставляет c.JSON(), c.XML(), c.String(), c.HTML(), c.File(), c.Blob() и другие методы для отправки ответов разных форматов с нужным Content-Type.

JSON

type User struct {
	ID   int    `json:"id"`
	Name string `json:"name"`
}

e.GET("/user", func(c echo.Context) error {
	user := User{ID: 1, Name: "Alice"}
	// Content-Type: application/json; charset=UTF-8
	return c.JSON(http.StatusOK, user)
})

// Красивое форматирование (отступы)
e.GET("/user/pretty", func(c echo.Context) error {
	user := User{ID: 1, Name: "Alice"}
	return c.JSONPretty(http.StatusOK, user, "  ")
})

// JSONP для кросс-доменных запросов
e.GET("/user/jsonp", func(c echo.Context) error {
	user := User{ID: 1, Name: "Alice"}
	callback := c.QueryParam("callback")
	return c.JSONP(http.StatusOK, callback, user)
})

Форматы ответов в Echo

Echo предоставляет набор методов на объекте echo.Context для отправки ответов в разных форматах. Каждый метод устанавливает правильный заголовок Content-Type и сериализует данные.

XML

type Product struct {
	XMLName xml.Name `xml:"product"`
	ID      int      `xml:"id"`
	Title   string   `xml:"title"`
}

e.GET("/product", func(c echo.Context) error {
	p := Product{ID: 42, Title: "Laptop"}
	// Content-Type: application/xml; charset=UTF-8
	return c.XML(http.StatusOK, p)
})

// С отступами
e.GET("/product/pretty", func(c echo.Context) error {
	p := Product{ID: 42, Title: "Laptop"}
	return c.XMLPretty(http.StatusOK, p, "  ")
})

Текст и HTML

// Обычный текст — Content-Type: text/plain; charset=UTF-8
e.GET("/ping", func(c echo.Context) error {
	return c.String(http.StatusOK, "pong")
})

// HTML — Content-Type: text/html; charset=UTF-8
e.GET("/hello", func(c echo.Context) error {
	return c.HTML(http.StatusOK, "<h1>Hello, World!</h1>")
})

Файлы и потоки

// Отдать файл с диска
e.GET("/download", func(c echo.Context) error {
	return c.File("./files/report.pdf")
})

// Файл как вложение (с заголовком Content-Disposition: attachment)
e.GET("/attach", func(c echo.Context) error {
	return c.Attachment("./files/report.pdf", "report.pdf")
})

// Файл для открытия в браузере
e.GET("/inline", func(c echo.Context) error {
	return c.Inline("./files/photo.jpg", "photo.jpg")
})

// Произвольный байтовый поток
e.GET("/blob", func(c echo.Context) error {
	data := []byte{0x89, 0x50, 0x4E, 0x47} // PNG header
	return c.Blob(http.StatusOK, "image/png", data)
})

// Стриминг из io.Reader
e.GET("/stream", func(c echo.Context) error {
	reader, _ := os.Open("./large-file.csv")
	defer reader.Close()
	return c.Stream(http.StatusOK, "text/csv", reader)
})

Согласование формата (Content Negotiation)

e.GET("/data", func(c echo.Context) error {
	data := map[string]string{"key": "value"}
	accept := c.Request().Header.Get("Accept")
	switch {
	case strings.Contains(accept, "application/xml"):
		return c.XML(http.StatusOK, data)
	default:
		return c.JSON(http.StatusOK, data)
	}
})

Подводные камни

  • Двойная запись: нельзя вызывать два метода ответа подряд (например, c.JSON() а потом c.String()) — заголовки и тело уже отправлены после первого вызова.
  • Возврат nil после записи: если вы вручную пишете в c.Response().Writer, а потом возвращаете nil, Echo не будет отправлять дополнительного ответа — убедитесь, что не вернули ошибку случайно.
  • Сериализация nil-слайсов: в Go nil-слайс сериализуется как null, а пустой []T{} — как []. Используйте make([]T, 0) для пустых массивов в JSON.
  • c.File() и path traversal: передача пользовательского ввода в c.File() без санации пути опасна — используйте filepath.Clean() и проверяйте, что результат находится внутри ожидаемой директории.
  • Большие JSON-ответы: c.JSON() сериализует всё в память перед отправкой — для больших данных используйте c.Stream() с json.NewEncoder().
  • Charset в Content-Type: Echo добавляет ; charset=UTF-8 к JSON и XML автоматически — не переопределяйте заголовок вручную без необходимости.

Частые вопросы на собеседовании

  • В каких backend-проектах Echo (Go framework) является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Как реализовать middleware JWT-аутентификации в Echo?
  • Как Echo обрабатывает CORS и как его настроить?
  • Как настроить TLS/HTTPS в Echo?

Типичные ошибки

  • Давать ответ про форматы ответов в Echo только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «форматы ответов в Echo»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать форматы ответов в Echo с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает форматы ответов в Echo и где это используется в Go-коде.
  • Связывает форматы ответов в Echo с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме Echo →

Источники

  • https://echo.labstack.com/docs/response
←Предыдущий вопросВ чём разница между `c.Param()`, `c.QueryParam()` и `c.FormValue()` в Echo?Следующий вопрос→Как Echo достигает высокой производительности HTTP-маршрутизации?

Связанные темы

Echoapi-designCodingechoserialization