// Получать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
// 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 напрямую для выполнения запроса формы.
// 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
Чтобы получить параметры, связанные с запросом, более удобно и повысить эффективность разработки, мы можем определить тип данных запроса на основе Content-Type запроса и использовать механизм отражения для автоматического извлечения QueryString, формы, JSON, XML и других параметров в запрос в структуру.
В следующем примере кода демонстрируется мощная функция .ShouldBind(), которая может автоматически извлекать данные JSON, формы и типа QueryString на основе запроса и привязывать значение к указанному объекту структуры.
Пример кода:
// User определение Структура, обратите внимание: первая буква пишется с заглавной буквы
type User struct {
Username string `form:"username" json:"user"`
Password string `form:"password" json:"password"`
}
// Получить значение пропуска и привязать его к структуре /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
// Привязка значения публикации к структуре
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
При разработке API мы часто используем JSON или XML в качестве формата взаимодействия с данными. На данный момент мы можем использовать c.GetRawData() в gin для получения данных в теле запроса.
// Article определениеxmlпараметриз Структура
type Article struct {
Title string `xml:"title"`
Content string `xml:"content"`
}
// 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())
}
})
1696265111439
Тело запроса следующее:
<?xml version="1.0" encoding="UTF-8"?>
<article>
<content type="string">AIбольшое время</content>
<title type="string">ChatGPTполное разрешение</title>
</article>
// RequestBody определениеjsonпараметриз Структура
type RequestBody struct {
Name string `json:"name"`
Email string `json:"email"`
}
// 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