gin框架中HTTP请求和参数的解析


1. 方法一: 通用的处理方法---Handle

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
)

func main() {
	router := gin.Default()

	router.Handle("GET","/hello", func(ctx *gin.Context) {
		fmt.Println(ctx.FullPath())
		//name := ctx.Query("name")
		name := ctx.DefaultQuery("name", "默认值")
		fmt.Println("name =", name)
		ctx.Writer.Write([]byte("hello " + name))
	})

	// post: /login?name=zhangsna&pwd=123456
	router.Handle("POST", "/login", func(ctx *gin.Context) {
		// 接收前端传递的json数据
		/* 方法一
		json := make(map[string]interface{})
		ctx.BindJSON(&json)
		fmt.Println(json)
		 */

		// 方法二
		var userLogin UserLogin
		ctx.Bind(&userLogin)
		fmt.Println(userLogin)

		fmt.Println(ctx.FullPath())
		name := ctx.DefaultPostForm("name", "张三")
		pwd := ctx.DefaultPostForm("pwd", "789789")
		ctx.Writer.Write([]byte(name + ":" + pwd))
	})

	if err := router.Run(":8000"); err != nil {
		log.Fatalln(err.Error())
	}
}

type UserLogin struct {
	Name string `json:"name"`
	Password string `json:"pwd"`
}

2.  分类处理

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func Hello(ctx *gin.Context) {
	// GET请求
	fmt.Println(ctx.FullPath(), ctx.ClientIP())
	fmt.Println(ctx.Query("name"))
	ctx.Writer.Write([]byte("hello " + ctx.Query("name")))
}
type Login struct {
	Name string `json:"name"`
	Password string `json:"pwd"`
}
func UserLogin(ctx *gin.Context) {
	// POST请求
	fmt.Println(ctx.FullPath(), ctx.ClientIP())
	var login Login
	ctx.BindJSON(&login)
	fmt.Println(login)
	ctx.Writer.Write([]byte(login.Name + ":" + login.Password))
}
func UserDelete(ctx *gin.Context) {
	id := ctx.Param("id")
	fmt.Println("Param_id:", id)
	ctx.Writer.Write([]byte("delete user id:" + id))
}

func main() {
	router := gin.Default()

	router.GET("/hello", Hello)
	router.POST("/login", UserLogin)
	router.DELETE("/user/:id", UserDelete)

	router.Run(":8000")
}
gin