gin post 数据参数_gin里获取http请求过来的参数 - Go语言中文社区

gin post 数据参数_gin里获取http请求过来的参数


package main

import (

"bytes"

"encoding/json"

"fmt"

"log"

"strconv"

"github.com/gin-gonic/gin"

)

func main() {

engine := gin.Default()

// Query / DefaultQuery 单个接收get参数

//http://localhost:8080/hello?name=haima

engine.GET("/hello", func(context *gin.Context) {

fmt.Println(context.FullPath())

//获取字符串参数

username := context.Query("name") //方法一

fmt.Println(username)

//name := context.DefaultQuery("name", "") //方法二

//fmt.Println(name)

context.Writer.Write([]byte("Hello," + username)) //Hello,go

})

type Student struct {

Name string `form:"name"`

Classes string `form:"classes"`

}

// ShouldBindQuery 批量接收get参数

// http://localhost:8080/hello2?name=davie&classes=软件工程

engine.GET("/hello2", func(context *gin.Context) {

fmt.Println(context.FullPath())

var student Student

err := context.ShouldBindQuery(&student)

if err != nil {

log.Fatal(err.Error())

}

fmt.Println(student.Name) //davie

fmt.Println(student.Classes) //软件工程

context.Writer.Write([]byte("hello," + student.Name))

})

type Register struct {

UserName string `form:"name"`

Phone string `form:"phone"`

Password string `form:"pwd"`

}

//http://localhost:8080/login

//单个接收post过来的参数

engine.POST("/login", func(context *gin.Context) {

fmt.Println(context.FullPath()) // /login

username := context.PostForm("username") //方法一

//username, exist := context.GetPostForm("username") //方法二

userId, _ := strconv.ParseInt(context.Query("user_id"), 10, 64)

//if !exist {

// fmt.Println(username) //adf

//}

//password := context.PostForm("pwd")

password, exists := context.GetPostForm("pwd") //12323

//password:= com.StrTo(context.GetPostForm("pwd")).MustInt()

if !exists {

fmt.Println(password) //12323

}

fmt.Printf("%T %sn", username,username) //string adf

fmt.Printf("%T %dn", userId,userId) //int64 0

fmt.Printf("%T %sn", password,password) //string 12323

context.Writer.Write([]byte("Hello " + username + ", pwd:" + password)) //Hello go, pwd:123

})

//http://localhost:8080/register

// ShouldBind 批量接收post数据 from-data

engine.POST("/register", func(context *gin.Context) {

fmt.Println(context.FullPath())

var register Register

if err := context.ShouldBind(&register); err != nil {

log.Fatal(err.Error())

return

}

fmt.Println(register.UserName)

fmt.Println(register.Phone)

context.Writer.Write([]byte(register.UserName + " Register "))

})

// BindJSON 批量接收 post raw json 数据 方法一

//http://localhost:8080/testpost

//{

// "user_id": 1,

// "linkbook_id": "001",

// "type":"education",

// "id": 2

//}

engine.POST("/testpost", func(ctx *gin.Context) {

fmt.Println(ctx.FullPath())

type delInfo struct {

UserID int `from:"user_id"`

LinkbookID string `from:"linkbook_id"`

Type string `from:"type"`

ID int `from:"id"`

}

var delInfoParam delInfo

if err := ctx.BindJSON(&delInfoParam); err != nil {

log.Fatal(err.Error())

return

}

ctx.Writer.Write([]byte("Hello," + delInfoParam.Type)) //Hello,go

})

// BindJSON 批量接收 post raw json 数据 方法二

//http://localhost:8080/test

engine.POST("/test", func(context *gin.Context) {

fullPath := "请求路径:" + context.FullPath()

fmt.Println(fullPath)

SetBodyJson(context, "json")

var delInfo map[string]interface{}

err := getRequestBody(context, &delInfo)

fmt.Println(err)

fmt.Println(delInfo)

})

//http://localhost:8080/user/22

engine.DELETE("/user/:id", DeleteHandle)

engine.Run(":8090")

}

//http://localhost:8080/user/adf

func DeleteHandle(context *gin.Context) {

fmt.Println(context.FullPath()) // /user/:id

userID := context.Param("id")

fmt.Println(userID) //adf

context.Writer.Write([]byte("Delete user's id : " + userID)) //Delete user's id : adf

}

func getRequestBody(context *gin.Context, s interface{}) error {

body, _ := context.Get("json")

reqBody, _ := body.(string)

decoder := json.NewDecoder(bytes.NewReader([]byte(reqBody)))

decoder.UseNumber()

err := decoder.Decode(&s)

return err

}

// @desc 通过上下文获取body内容并将内容写到指定key中

func SetBodyJson(context *gin.Context, key string) {

body := make([]byte, 1048576)

n, _ := context.Request.Body.Read(body)

fmt.Println("request body:", n)

context.Set(key, string(body[0:n]))

}

//type People interface {

// name()

//}

//

//type Wang struct {

// Name string

//}

//

//func (p *Wang) name() {

// p.Name = "wang"

//}

//

//func (p *Wang) sayMyName() {

// fmt.Println(p.Name)

//}

context.Param获取请求参数

最后的1是要删除的用户的id,是一个变量。因此在服务端gin中,

通过路由的:id来定义一个要删除用户的id变量值,

同时使用context.Param进行获取

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_39619174/article/details/111932223
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-18 05:39:04
  • 阅读 ( 1164 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢