Gin 获取请求参数
1、获取URL?后的参数(不区分请求方式)
// 获取请求url ? 后的参数(url:8080/add?name=kelvin) func GetUrlParam(ctx *gin.Context) { name := ctx.Query("name") defaultName := ctx.DefaultQuery("name", "defaultName...") ctx.JSON(http.StatusOK, gin.H{ "name": name, "defaultName": defaultName, }) }
2、获取form参数(post方式)
// 获取请求表单的参数 func GetFormParam(ctx *gin.Context) { formName := ctx.PostForm("name") defaultPostFormName := ctx.DefaultPostForm("name", "default name form ~~~") ctx.JSON(http.StatusOK, gin.H{ "formName": formName, "defaultPostFormName": defaultPostFormName, }) }
3、获取json参数
// 获取请求Json参数体 func GetJson(ctx *gin.Context) { data, err := ctx.GetRawData() if err != nil { ctx.JSON(http.StatusInternalServerError, gin.H{ "msg": "获取json数据异常", }) } var m map[string]interface{} // 反序列化 _ = json.Unmarshal(data, &m) ctx.JSON(http.StatusOK, gin.H{ "json": &m, }) }
4、获取路径参数
// 获取请求url中的路径参数(url:8080/add/:name/:age) func GetUrlPathParam(ctx *gin.Context) { name := ctx.Param("name") age := ctx.Param("age") ctx.JSON(http.StatusOK, gin.H{ "name": name, "age": age, }) }
5、获取url指定位置后的路径
// 获取请求url中的路径(url:8080/add/*path,url:8080/add/student/ok,path取出即是/student/ok) func GetUrlLike(ctx *gin.Context) { path := ctx.Param("path") ctx.JSON(http.StatusOK, gin.H{ "path": path, }) }
6、struct绑定请求参数
// 将请求参数直接复制给struct对象的属性 type User struct { Name string `form:"name"` Age int64 `form:"age"` } func BindParamToStruct(ctx *gin.Context) { var user User // 将请求参数直接赋值给user对象 err := ctx.BindQuery(&user) // 和上个方法一致,只是如果user规定某个字段必传时,上个方法调用时接口响应码为400,本方法可以自行处理异常,正常返回数据 //err := ctx.ShouldBindQuery(&user) if err != nil { log.Println(err) } ctx.JSON(http.StatusOK, gin.H{ "user": user, }) }
7、获取前端url参数数组形式
// url:8080/set?hobby=foot&hobby=apple func GetUrlArray(ctx *gin.Context) { // 获取参数名是“hobby”的参数,结果为数组 array := ctx.QueryArray("hobby") // 同上方法,只不过会有是否获取成功的返回值 //queryArray, ok := ctx.GetQueryArray("hobby") ctx.JSON(http.StatusOK, gin.H{ "array": array, }) }
注意:也可以使用struct绑定形式接受数组,需要在struct中定义数组类型的属性并将该属性的tag名改为请求参数名
8、获取文件数据
// 获取form表单数据及文件 func FileUpload(ctx *gin.Context) { form, err := ctx.MultipartForm() if err != nil { log.Println(err) } value := form.Value filesMap := form.File log.Println(filesMap) for _, fileArray := range filesMap { log.Println(fileArray) for _, file := range fileArray { ctx.SaveUploadedFile(file, "./files/"+file.Filename) } } ctx.JSON(http.StatusOK, gin.H{ "value": value, }) }
未完待续~~~