Go Gin 快速学习 【GIN参数获取】
GIN参数获取
query 参数
// 1. DefaultQuery 获取不到地址栏参数,设置默认值
username:=c.DefaultQuery("username","zhangsan")
// 2. Query 获取地址栏参数
address := c.Query("address")
form 参数
// 1. DefaultPostForm ,取不到数据时返回默认值
username:=c.DefaultPostForm("username","zhangsan")
// 2. PostForm 获取 form表单中的数据
address:=c.PostForm("address")
json参数
// 1. 从c.Request.Body 请求体中获取数据
//1.1 body 是字符串数据
body,_ :=c.GetRawData()
//1.2 定义MAP或者结构体
var m map[string]interface{}
// 1.3 反序列化
_ = json.Unmarshal(body,&m)
path 参数(路由固定参数)
// 定义路由时,访问路径如下
http://xxx:8080/api/user/:id
// 获取路由上携带的参数
id:=c.Param("id")
ShouldBind参数绑定
基于请求的Content-Type 自动识别数据类型,并利用反射机制提取请求中的数据给到对应的结构体中
// 定义结构体。form/json是tag,表示从页面或接口调用时传递的参数名。binding是必填tag
type Login struct {
User string `form:"user" json:"user" binding:"required"`
Password string `form:"password" json:"password" binding:"required"`
}
var loginReq Login
// 1. JSON 绑定: ShouldBind
c.ShouldBind(&login) // 传入结构体对象地址
// 2. Form 绑定: ShouldBind
c.ShouldBind(&login);
// 3. QueryString 地址栏绑定: ShouldBind
c.ShouldBind(&login);
文件上传
单个文件上传
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"os"
)
func main() {
router := gin.Default()
router.POST("/upload", func(c *gin.Context) {
file, _ := c.FormFile("file")
log.Println(file.Filename)
// 当前路径
pwd, _ := os.Getwd()
fmt.Println("当前路径pwd:", pwd)
savePath := pwd + "/static/upload/"
fmt.Println("存储路径savePath:", savePath)
// 保存文件,如果目录不存在就创建该目录
if _, err := os.Stat(savePath); os.IsNotExist(err) {
os.Mkdir(savePath, 0755)
}
dst := savePath + file.Filename
c.SaveUploadedFile(file, dst)
c.JSON(200, gin.H{
"message": "upload success",
})
})
router.Run(":8080")
}
多个文件上传
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"os"
)
func main() {
router := gin.Default()
router.POST("/upload", func(c *gin.Context) {
// 处理multipart forms提交文件时默认的内存限制是32 MiB
// 可以通过下面的方式修改
//router.MaxMultipartMemory = 8 << 20 // 8 MiB
form, _ := c.MultipartForm()
files := form.File["file"]
for _, file := range files {
log.Println(file.Filename)
// 当前路径
pwd, _ := os.Getwd()
fmt.Println("当前路径pwd:", pwd)
savePath := pwd + "/static/upload/"
fmt.Println("存储路径dst:", savePath)
// 保存文件,如果目录不存在就创建该目录
if _, err := os.Stat(savePath); os.IsNotExist(err) {
os.Mkdir(savePath, 0755)
}
dst := savePath + file.Filename
c.SaveUploadedFile(file, dst)
}
c.JSON(200, gin.H{
"message": "upload success",
})
})
router.Run(":8080")
}

浙公网安备 33010602011771号