6. Подробности маршрутизации Gin — примеры запроса GET POST и получения параметров.
6. Подробности маршрутизации Gin — примеры запроса GET POST и получения параметров.

6. Подробности маршрутизации Gin — примеры запроса GET POST и получения параметров.

GET POST Примеры запроса и получения параметров

Получить запрос: Получить параметры Quary

Язык кода:javascript
копировать
// Получатьqueryпараметр Пример:GET /user?uid=20&name=jack&page=1
r.GET("/user", func(c *gin.Context) {
    // Получатьпараметр
    // QueryПолучатьпараметр
    uid := c.Query("uid")
    username := c.Query("name")
    // DefaultQuery Получить параметр, вы можете установить значение по умолчанию: то есть, если такого параметра нет, используется значение по умолчанию.
    page := c.DefaultQuery("page", "1")

    // Вернуть результат JSON
    c.JSON(http.StatusOK, gin.H{
       "uid":      uid,
       "username": username,
       "page":     page,
    })
})

Тест заключается в следующем:

1696261337707

Получить запрос: динамическая маршрутизация, получить параметр Path

Язык кода:javascript
копировать
// GET Получатьpathпутьпараметр
r.GET("/book/:bid", func(c *gin.Context) {
    // Получатьpathпараметр
    bid := c.Param("bid")
    // Информация о возврате ответа
    c.JSON(http.StatusOK, gin.H{
       "message": fmt.Sprintf("bid=%s", bid),
    })
})

Тест заключается в следующем:

1696262492501

Почтовый запрос: Получить данные формы

Для простой демонстрации используйте apifox напрямую для выполнения запроса формы.

Язык кода:javascript
копировать
// POST Пример запроса: Получить form Форма параметра
r.POST("/addUser", func(c *gin.Context) {
    // Получатьformформапараметр    // Использовать PostForm Получить один параметр
    username := c.PostForm("username")
    // DefaultPostForm принимает значение по умолчанию, если параметр не установлен.
    gender := c.DefaultPostForm("gender", "male")
    // PostFormArray Получить массив строковых параметров
    hobby := c.PostFormArray("hobby")
    // Возврат результата ответа
    c.JSON(http.StatusOK, gin.H{
       "username": username,
       "gender":   gender,
       "hobby":    hobby,
    })
})

Тест заключается в следующем:

1696263335027

Получите данные параметра, переданные GET POST, и привяжите их к структуре.

Чтобы получить параметры, связанные с запросом, более удобно и повысить эффективность разработки, мы можем определить тип данных запроса на основе Content-Type запроса и использовать механизм отражения для автоматического извлечения QueryString, формы, JSON, XML и других параметров в запрос в структуру.

В следующем примере кода демонстрируется мощная функция .ShouldBind(), которая может автоматически извлекать данные JSON, формы и типа QueryString на основе запроса и привязывать значение к указанному объекту структуры.

Пример кода:

  • Определить структуру пользователя
Язык кода:javascript
копировать
// User определение Структура, обратите внимание: первая буква пишется с заглавной буквы
type User struct {
    Username string `form:"username" json:"user"`
    Password string `form:"password" json:"password"`
}
  • Получить значение пропуска и привязать его к структуре
Язык кода:javascript
копировать
// Получить значение пропуска и привязать его к структуре /userinfo?username=jackson&password=123456
r.GET("/userinfo", func(c *gin.Context) {
    // Создать объект пользователя
    var userinfo User
    // Используйте MustBind для привязки параметра к объекту
    if err := c.ShouldBind(&userinfo); err == nil {
       // Если привязка прошла успешно, будет возвращен результат.
       c.JSON(http.StatusOK, userinfo)
    } else {
       // Если привязка не удалась, будет возвращено сообщение об ошибке.
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    }
})

Тест заключается в следующем:

1696264565233

  • Привязка значения публикации к структуре
Язык кода:javascript
копировать
// Привязка значения публикации к структуре
r.POST("/login", func(c *gin.Context) {
    // Создать объект пользователя
    var userinfo User
    // Используйте MustBind для привязки параметра к объекту
    if err := c.ShouldBind(&userinfo); err == nil {
       // Если привязка прошла успешно, будет возвращен результат.
       c.JSON(http.StatusOK, userinfo)
    } else {
       // Если привязка не удалась, будет возвращено сообщение об ошибке.
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    }
})

Тест заключается в следующем:

1696264705121

Получить данные Post XML

При разработке API мы часто используем JSON или XML в качестве формата взаимодействия с данными. На данный момент мы можем использовать c.GetRawData() в gin для получения данных в теле запроса.

Получить XML-данные
  • определение XML параметриз Структура
Язык кода:javascript
копировать
// Article определениеxmlпараметриз Структура
type Article struct {
    Title string `xml:"title"`
    Content string `xml:"content"`
}
  • определение ПолучатьXMLпараметризAPI
Язык кода:javascript
копировать
// Post Получать XML Параметр тела запроса
r.POST("/xml", func(c *gin.Context) {
    // от c.Request.Body Чтение данных запроса
    body, _ := c.GetRawData()
    // Инициализируйте объект Структура
    article := &Article{}
    // Используйте xml.Unmarshal для привязки параметра к объекту.
    if err := xml.Unmarshal(body, &article); err == nil {
       // Если привязка прошла успешно, будет возвращен результат.
       c.JSON(http.StatusOK, article)
    } else {
       // Если привязка не удалась, будет возвращено сообщение об ошибке.
       c.JSON(http.StatusBadRequest, err.Error())
    }
})
  • xml-параметр тестового запроса

1696265111439

Тело запроса следующее:

Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?>
<article>
    <content type="string">AIбольшое время</content>
    <title type="string">ChatGPTполное разрешение</title>
</article>
Получить данные JSON
  • определение JSON данныеиз Структура
Язык кода:javascript
копировать
// RequestBody определениеjsonпараметриз Структура
type RequestBody struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}
  • определение ПолучатьJSONпараметризAPI
Язык кода:javascript
копировать
// POST Получать JSON Параметр тела запроса
r.POST("/api/parsejson", func(c *gin.Context) {
    // Создайте объект для тела запроса
    var reqBody RequestBody

    // использовать ShouldBindJSON Воля JSON Тело запроса привязано к структуре.
    if err := c.ShouldBindJSON(&reqBody); err != nil {
       // Если синтаксический анализ не удался, возвращается ответ об ошибке.
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
       return
    }

    // Распечатать проанализированный параметр
    fmt.Printf("Name: %s\n", reqBody.Name)
    fmt.Printf("Email: %s\n", reqBody.Email)

    // Вернуть успешный ответ
    c.JSON(http.StatusOK, gin.H{
       "message": "JSON body parsed successfully",
       "reqBody": reqBody,
    })
})
  • Тестовый запрос выглядит следующим образом

1696265562524

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.