一、搭建基础框架
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"`
}