Ответ
Веб-фреймворк Gin предоставляет удобные инструменты для работы с различными форматами данных как в теле запроса, так и в ответе. Ключевые форматы:
-
JSON — самый распространенный формат для REST API. Gin умеет автоматически парсить (bind) JSON из тела запроса в Go-структуры и сериализовывать структуры в JSON-ответ.
type User struct { Name string `json:"name" binding:"required"` Age int `json:"age"` } router.POST("/user", func(c *gin.Context) { var user User // ShouldBindJSON парсит тело запроса в структуру. if err := c.ShouldBindJSON(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } // c.JSON сериализует структуру и отправляет с кодом 200. c.JSON(http.StatusOK, user) })
-
Данные форм (Form-Data и x-www-form-urlencoded) — для данных, отправленных из HTML-форм, и параметров из URL (query parameters).
router.POST("/form", func(c *gin.Context) { // Данные из тела формы name := c.PostForm("name") // Данные из строки запроса (?age=25) // DefaultQuery позволяет задать значение по умолчанию. age := c.DefaultQuery("age", "18") c.String(http.StatusOK, "Name: %s, Age: %s", name, age) })
-
XML — поддерживается аналогично JSON для парсинга и генерации XML-ответов.
// Отправка XML-ответа c.XML(http.StatusOK, gin.H{"status": "success", "message": "pong"})
-
YAML — Gin не имеет встроенной поддержки YAML, но его можно легко интегрировать, используя сторонние библиотеки (например,
gopkg.in/yaml.v2
) для парсинга тела запроса или формирования ответа. -
Бинарные данные (Raw Data) — для обработки файлов, изображений или любых других бинарных данных можно использовать
c.GetRawData()
для чтения иc.Data()
для отправки.
Gin также позволяет создавать собственные рендереры и биндеры для поддержки любых других форматов.