golang gin框架获取参数的操作

1.获取URL参数

GET请求参数通过URL传递

URL参数可以通过DefaultQuery()或Query()方法获取

DefaultQuery()若参数不存在,返回默认值,Query()若参数不存在,返回空串

user_id := com.StrTo(ctx.Query("user_id")).MustInt64()

page := com.StrTo(ctx.DefaultQuery("page", "1")).MustInt()

2.获取表单参数/获取Request body参数

POST参数放在Request body中

表单传输为post请求,http常见的传输格式为四种:

application/json
application/x-www-form-urlencoded
application/xml
multipart/form-data

表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数

page := ctx.Request.PostFormValue("page")

rows := ctx.Request.PostFormValue("rows")

func (r *Request) PostFormValue(key string) string {
 if r.PostForm == nil {
 r.ParseMultipartForm(defaultMaxMemory)
 }
 if vs := r.PostForm[key]; len(vs) > 0 {
 return vs[0]
 }
 return ""
}
package controller
import (
 "bytes"
 "encoding/json"
 "github.com/gin-gonic/gin"
)
func getRequestBody(context *gin.Context, s interface{}) error { //获取request的body
 body, _ := context.Get("json") //转换成json格式
 reqBody, _ := body.(string)
 decoder := json.NewDecoder(bytes.NewReader([]byte(reqBody)))
 decoder.UseNumber() //作为数字而不是float64
 err := decoder.Decode(&s)//从body中获取的参数存入s中
 return err
}
// 获取post接口参数
func GetPostParams(ctx *gin.Context) (map[string]interface{}, error) {
 params := make(map[string]interface{})
 err := getRequestBody(ctx, &params)
 return params, err
}

使用场景:

//打印获取到的参数
type UpdatePassword struct {
 UserId int64 `json:"user_id"`
 LinkbookId string `json:"linkbook_id"`
 OldPassword string `json:"old_password"`
 NewPassword string `json:"new_password"`
}
func UpdateUserPassword(ctx *gin.Context) {
 var updatePassword = UpdatePassword{}
 err := getRequestBody(ctx, &updatePassword)//调用了前面代码块中封装的函数,自己封装的,不是库里的
 if err != nil {
 fmt.Println(err)
 }
 fmt.Println(updatePassword.UserId )
 fmt.Println(updatePassword.LinkbookId )
 fmt.Println(updatePassword.OldPassword )
 fmt.Println(updatePassword.NewPassword )
}

3.获取header参数

Header 是键值对,处理方便,Token一般都存header

简单的token,session Id,cookie id等

// 通过上下文获取header中指定key的内容
func GetHeaderByName(ctx *gin.Context, key string) string {
 return ctx.Request.Header.Get(key)
}

补充:gin之处理form表单获取参数和映射结构体

不管是传递json还是form传值

注意 ,在结构体定义时 首字母必须大写

//定义结构体
Id int form:"id"
Name string form:"name"
//获取和绑定参数
id := context.Query(“id”)
var user User
context.Bind(&user)
//定义结构体
Id int json:"id"
Name string json:"name"

总结:

如上:如果是form传值,结构体参数后面定义的是form,都可获取参数,也可绑定结构体; //如果是form传值,结构体参数后面定义的是json,都可获取参数,但绑定不了结构体;

如果是json传值,则取不了参数值,但可以绑定结构体;

获取和绑定参数如上

三种绑定方式:

context.Bind() 都可以绑定

context.ShouldBind() 都可以绑定

ShouldBindQuery() 只能绑定get

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang-gin-mgo高并发服务器搭建教程

    gin-mgo服务器搭建 该服务器实现简单接收请求并将请求参数封装存储在mongodb数据库中,本文将讲述gin-mgo的使用方法. 项目完整代码地址: https://github.com/wayne-yhp/golang-gin-mgo gin web框架使用介绍 首先获取gin框架依赖 go get gopkg.in/gin-gonic/gin.v1 func main() { server = gin.Default() app.server.GET("/do", IndexR

  • golang gin 框架 异步同步 goroutine 并发操作

    goroutine机制可以方便地实现异步处理 package main import ( "log" "time" "github.com/gin-gonic/gin" ) func main() { // 1.创建路由 // 默认使用了2个中间件Logger(), Recovery() r := gin.Default() // 1.异步 r.GET("/long_async", func(c *gin.Context) {

  • golang API开发过程的中的自动重启方式(基于gin框架)

    概要 基于 golang Gin 框架开发 web 服务时, 需要时不时的 go build , 然后重启服务查看运行结果. go build 的过程集成在编辑器中(emacs), 可以通过快捷键迅速完成, 但是每次重启服务都切换到命令行中操作. 因此, 希望能够编译通过之后自动重启服务. 这里并不是部署阶段的服务重启, 所以不用过多考虑是否正常退出其中的协程. 实现方式 在开源的 illuminant 项目中, 已经将相应的代码集成到 gin 的 debug mode 中. 代码文件: htt

  • 基于gin的golang web开发之认证利器jwt

    JSON Web Token(JWT)是一种很流行的跨域认证解决方案,JWT基于JSON可以在进行验证的同时附带身份信息,对于前后端分离项目很有帮助. eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c JWT由三部分组成,每个部分之间用点

  • golang gin框架获取参数的操作

    1.获取URL参数 GET请求参数通过URL传递 URL参数可以通过DefaultQuery()或Query()方法获取 DefaultQuery()若参数不存在,返回默认值,Query()若参数不存在,返回空串 user_id := com.StrTo(ctx.Query("user_id")).MustInt64() page := com.StrTo(ctx.DefaultQuery("page", "1")).MustInt() 2.获取

  • Golang Gin框架实现文件下载功能的示例代码

    目录 Layui框架实现文件上传 Gin框架获取前端上传的文件 Gin框架的文件下载 Layui框架实现文件上传 基本的思路就是随便创建一个元素,然后使用layui的upload组件对创建的元素进行渲染,详见代码 <!DOCTYPE html> <html lang="en"> <head> <script src="jquery-3.5.0.min.js" type="text/javascript"&

  • Gin框架之参数绑定的实现

    为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryString.form表单.JSON.XML等参数到结构体中. 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON.form表单和QueryString类型的数据,并把值绑定到指定的结构体对象. 以下示例分别是对QueryString.form.json进行参数绑定. 注意: 1.结构体内部属性名大写 2.加地址符:

  • golang gin框架实现大文件的流式上传功能

    目录 upload.html gin_stream_upload_file.go 一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理.以下的代码实现了大文件流式上传.还非常不完美,但是可以作为参考: upload.html <!DOCTYPE html> <html lang="en"> <head> <meta charse

  • golang gorm框架数据库的连接操作示例

    目录 1. 连接数据库 1.1 MySQL 1.2 PostgreSQL 1.3 Sqlite3 1.4 不支持的数据库 2. 迁移 2.1. 自动迁移 2.2. 检查表是否存在 2.3. 创建表 2.4. 删除表 2.5. 修改列 2.6. 删除列 2.7. 添加外键 2.8. 索引 1. 连接数据库 要连接到数据库首先要导入驱动程序.例如 import _ "github.com/go-sql-driver/mysql" 为了方便记住导入路径,GORM包装了一些驱动. import

  • 解决golang gin框架跨域及注解的问题

    在golang的路上缓慢前进 Gin框架 跨域问题的解说与方法 代码如下: package main import ( "github.com/gin-gonic/gin" "awesomeProject/app/app_routers" "strings" "fmt" "net/http" ) /* 路由初始化*/ var ( engine = gin.Default() ) func main() {

  • python—sys模块之获取参数的操作

    sys模块:全称system,指的是解释器. 常用操作,用于接收系统操作系统调用解释器传入的参数 1. sys.argv 获取脚本传递的所有参数,返回一个列表.列表中的所有元素均为脚本传递的参数. sys.argv[0] # 脚本传递的第一个参数,固定为脚本名称,可以通过次方式获得脚本名称 可以使用索引依次获得脚本传递的其他参数 2. sys.version 获取解释器的版本信息,返回一个字符串.根据python版本编写符合不同版本的程序 使程序可兼容 3.6.4 (default, Aug 1

  • Golang中Gin框架的使用入门教程

    目录 安装与简单测试 常见请求与分组请求 获取参数 与 参数合法性验证 获得query中参数 获得multipart/urlencoded form中的参数 模型绑定和参数验证 自定义参数验证 项目结构参考 Gin框架运行模式 Gin如何获取客户ip Gin处理请求结果 以String类型响应请求 以Json格式响应请求 以文件形式响应请求 设置http响应头 Gin处理html模板 Gin访问静态资源文件 Gin处理Cookie操作 Gin文件上传 Gin中间件 官方地址:gin-gonic.

随机推荐