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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose