Gin学习之路

gin框架

文档地址:https://gin-gonic.com/zh-cn/docs

入门案例:
func main() {
	r := gin.Default()
	r.GET("/", func(ctx *gin.Context) {
		ctx.JSON(200, gin.H{
			"msg": "pong",
		})
	})
	r.Run()
	fmt.Print(r)
}

这个案例使用了GET方式。
使用gin.Default()还有gin.New(); 两者的关系,Dafault内部实际上也是调用了New,但是加上了Logger和Recovery中间件。

HTTP请求方式及Handle

gin支持GET、POST、POST、PUT、DELETE、PATCH、HEAD、OPTIONS方式。

func main() {
	// 禁用控制台颜色
	// gin.DisableConsoleColor()

	// 使用默认中间件(logger 和 recovery 中间件)创建 gin 路由
	router := gin.Default()

	router.GET("/someGet", getting)
	router.POST("/somePost", posting)
	router.PUT("/somePut", putting)
	router.DELETE("/someDelete", deleting)
	router.PATCH("/somePatch", patching)
	router.HEAD("/someHead", head)
	router.OPTIONS("/someOptions", options)

	// 默认在 8080 端口启动服务,除非定义了一个 PORT 的环境变量。
	router.Run()
	// router.Run(":3000") hardcode 端口号
}
请求参数处理
GET请求:

关键方法:
c.Query(“key”)
c.DefaultQuery(“key”,“xxoo”) 没有key会给一个默认值

func getKey(c *gin.Context) {
	name := c.Query("name")
	pass := c.DefaultQuery("pass", "zero")
	c.String(200, "this is get key 获取到的key值是=%s", name)
	c.String(200, "this is get key 获取到的pass key值是=%s", pass)
}
Post请求

关键方法
c.PostForm()
c.DefaultPostFrom()

func postVal(c *gin.Context) {
	name := c.PostForm("name")
	age := c.DefaultPostForm("age", "1")
	c.String(200, "this is get key 获取到的key值是=%s %s", name, age)

}
Gin使用中间件

请求拦截
gin.default实例化引擎,默认有两个中间件Logger和Recovery分别处理日志和错误
自定义中间件
关键方法:engine.Use()

func MyHandler(c *gin.Context) {
	fmt.Println("有请求来了MyHandler ")
}
func MyMidHandler() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		path := ctx.FullPath()
		method := ctx.Request.Method
		fmt.Printf("path is %s and method is %s \n", path, method)
	}
}
func main() {
	egin := gin.Default()
	egin.Use(MyHandler, MyMidHandler())
	egin.GET("/", index)
	egin.Run()
}
使用BasicAuth中间件路由组权限管理
// 模拟一些私人数据
var secrets = gin.H{
	"foo":    gin.H{"email": "foo@bar.com", "phone": "123433"},
	"austin": gin.H{"email": "austin@example.com", "phone": "666"},
	"lena":   gin.H{"email": "lena@guapa.com", "phone": "523443"},
}

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

	// 路由组使用 gin.BasicAuth() 中间件
	// gin.Accounts 是 map[string]string 的一种快捷方式
	authorized := r.Group("/admin", gin.BasicAuth(gin.Accounts{
		"foo":    "bar",
		"austin": "1234",
		"lena":   "hello2",
		"manu":   "4321",
	}))

	// /admin/secrets 端点
	// 触发 "localhost:8080/admin/secrets
	authorized.GET("/secrets", func(c *gin.Context) {
		// 获取用户,它是由 BasicAuth 中间件设置的
		user := c.MustGet(gin.AuthUserKey).(string)
		if secret, ok := secrets[user]; ok {
			c.JSON(http.StatusOK, gin.H{"user": user, "secret": secret})
		} else {
			c.JSON(http.StatusOK, gin.H{"user": user, "secret": "NO SECRET :("})
		}
	})

	// 监听并在 0.0.0.0:8080 上启动服务
	r.Run(":8080")
}
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值