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")
}

posted @ 2025-11-17 18:00  染指未来  阅读(13)  评论(0)    收藏  举报