一、搭建基础框架

1、安装gin

新建项目文件夹(gin_demo),并切换至文件夹:

go mod init
go get -u  github.com/gin-gonic/gin

2、新建main.go入口文件(注意修改包名):

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	//创建一个默认的路由引擎
	r := gin.Default()
	r.GET("/hello", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"message": "Hello  world",
		})
	})
	r.Run(":9090")
}

终端运行:go run main.go 

 

3、创建项目目录

二、使用router和controller

1、用户相关接口:UserController

package controller
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
type UserController struct {
}
//新增用户
func (controller *UserController) Add(context *gin.Context) {
	name, exist := context.GetPostForm("name")
	if !exist || name == "" {
		context.JSON(http.StatusOK, gin.H{
			"msg": "请输入用户名:name",
		})
		return
	}
	context.JSON(http.StatusOK, gin.H{
		"name": name,
	})
}

//查询用户
func (controller *UserController) Get(context *gin.Context) {
	id := context.Query("id")
	println("id:", id)
	context.JSON(http.StatusOK, gin.H{
		"id": id,
	})
}

2、路由配置:router

package routers
import (
	"gin_demo/controller"
	"github.com/gin-gonic/gin"
)
//路由设置
func RegisterRouter(router *gin.Engine) {
	routerUser(router)
}
//用户路由
func routerUser(engine *gin.Engine) {
	var group = engine.Group("/api/user")
	{
		con := &controller.UserController{}
		group.POST("/add", con.Add)
		group.GET("/get", con.Get)
	}
}

3、main.go入口引用

package main
import (
	"gin_demo/routers"
	"github.com/gin-gonic/gin"
)
func main() {
	//创建一个默认的路由引擎
	engine := gin.Default()
    //添加路由
	routers.RegisterRouter(engine)
	engine.Run(":9090")
}

三、接收和绑定参数的几种方式

package main

import (
	"fmt"
	"gin_demo/routers"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	//创建一个默认的路由引擎
	engine := gin.Default()
	engine.POST("/hello", func(c *gin.Context) {
		fullPath := c.FullPath() //请求地址
		fmt.Println(fullPath)

		var user User
		//绑定url参数
		//err := c.ShouldBindQuery(&user)
		//if err != nil {
		//	c.JSON(http.StatusOK, gin.H{"message": "param error"})
		//	return
		//}

		//绑定Form参数或绑定url参数,都可以用,优先获取Form
		//err := c.ShouldBind(&user)
		//if err != nil {
		//	c.JSON(http.StatusOK, gin.H{"message": "param error"})
		//	return
		//}

		//绑定json参数,BindJSON会将返回码改成400,ShouldBindJSON则不会
		//err := c.BindJSON(&user)
		err := c.ShouldBindJSON(&user)
		if err != nil {
			c.JSON(http.StatusOK, gin.H{"message": "param error"})
			return
		}
		fmt.Println(user.Name)
		fmt.Println(user.Age)

		//从url中获取
		//name := c.Query("name")
		//var age, err = strconv.Atoi(c.Query("age"))
		//if err != nil {
		//	age = 0
		//}

		//从form中取
		//name := c.PostForm("name")
		//var age, err = strconv.Atoi(c.PostForm("age"))
		//if err != nil {
		//	age = 0
		//}
		//
		//fmt.Println(name)
		//fmt.Println(age)

		//tm, err := time.Parse("2006-01-02 15:04:05", "2022-12-28 15:00:00")
		//if err == nil {
		//	fmt.Println(tm)
		//}
		c.JSON(http.StatusOK, gin.H{
			"message": "Hello  world",
		})
	})
	routers.RegisterRouter(engine)
	engine.Run(":9090")
}

type User struct { //字段名称一定要首字母大写
	Name string `form:"name"`
	Age  int    `form:"age"`
}