这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
- 此文章只包括Gin框架路由的某些基础用法
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
//func
func main() {
fmt.Println("Hello")
/**
gin.Default()里面调用了gin.New();在调用完gin.New()得到Engine 实例后,还调用了engine.Use(Logger(), Recovery());gin.Default()获取到的Engine 实例集成了Logger 和 Recovery 中间件
New 返回一个新的空白 Engine 实例,没有附加任何中间件。
*/
//Default返回一个Engin指针
route := gin.Default()
/**
这个方法两个参数,一个是相对路径,一个是多个handler,即针对用户一个请求地址,我可以指定多个handler来处理用户请求。但是一般情况下我们都是一个handler处理一个请求。
*/
route.GET("/Hello", func(context *gin.Context) {
/**
这个方法有两个参数,第一个是状态,第二个是结果。我这里直接指定200,表示成功,或者也可以用http包的常量值http.StatusOK;gin.H其实是一个map的数据结构即为map[string]interface{},然后将其转成json格式输出。
*/
context.JSON(200, gin.H{
"message": "Hello World FUCK YOU!",
})
})
//':'表示匹配至下一个"/"内的参数 "*"表示匹配剩下所有参数
route.GET("/user/:name/*pwd", func(context *gin.Context) {
fmt.Println("Hello!")
fmt.Println(context.Params)
fmt.Println(context.Param("pwd"))
})
route.GET("/userInfo", func(context *gin.Context) {
//通过Query方法获取URL参数
Info := context.Query("Info")
fmt.Println(Info)
//GetQuery方法返回URL参数,并且附带一个bool值,若参数存在则为true,不存在为false
fmt.Println(context.GetQuery("Info"))
})
route.POST("/form", func(context *gin.Context) {
username := context.PostForm("UserName")
userpassword := context.PostForm("UserPwd")
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>")
fmt.Println(username)
fmt.Println(userpassword)
//DefaultPostForm returns the specified key from a POST urlencoded form or multipart form when it exists, otherwise it returns the specified defaultValue string.
username2 := context.DefaultPostForm("type", "post")
fmt.Println(username2)
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>")
})
//路由拆分
route.GET("test", sayHI)
route.Run()
//路由分组
group1 := route.Group("g1")
{
group1.GET("sayHello", sayHello)
group1.GET("sayWelcome", sayWelcome)
}
}
// 拆分出来
func sayHI(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "HI",
})
}
func sayHello(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "Hello",
})
}
func sayWelcome(ctx *gin.Context) {
ctx.String(200, fmt.Sprintln("Welcome"))
}