Gin框架使用总结

技术概述

Gin是一个由Go(Golang)语言编写的HTTP Web框架。它提供Martini风格但是拥有更好性能的API,并且由于使用了httprouter,速度提高了近40倍。

技术详述

1.框架的安装

安装Go版本1.13以上并且执行下面Go命令行来安装Gin:

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

在代码中引用:

import "github.com/gin-gonic/gin"

2.框架的使用

  • 只需要一下代码就能开启一个简单的HTTP服务器:
package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run()
}
  • 自定义中间件进行初始化Session
func Session(secret string) gin.HandlerFunc {
	store := cookie.NewStore([]byte(secret))
	store.Options(sessions.Options{HttpOnly: true, MaxAge: 7 * 86400, Path: "/", Secure: false, SameSite: http.SameSiteStrictMode})
	return sessions.Sessions("gin-session", store)
}
  • 使用自定义Router:
// router.go中
func NewRouter() *gin.Engine {
	r := gin.Default()

  // 使用中间件
	r.Use(middleware.Session(os.Getenv("SESSION_SECRET")))
  
  // 路由
  ......
  
  return r
}

// main.go中
r := router.NewRouter()
  • 路由接受请求

接受请求的函数接受两个参数,一个是请求的URL路径,另一个是处理这个请求的函数HandlerFunc,如:

r.POST("login", api.UserLogin)

接受到对loginPOST请求的时候,就通过api.UserLogin这个函数进行处理。

HandleFunc可以在处理完业务逻辑之后,通过JSON()或其他函数将消息返回前端。

func UserLogin(c *gin.Context) {
	//......
  // 业务逻辑

	c.JSON(http.StatusOK, res)
}
  • Gin有多种从前端获取信息的方式,如:JSON,URL参数等。
// URL参数,匹配 "/user/user_name"
r.GET("/user/:name", func(c *gin.Context) {
		name := c.Param("name")
	})

// URL参数,匹配 "/welcome?firstname=Jane&lastname=Doe"
r.GET("/welcome", func(c *gin.Context) {
		firstname := c.DefaultQuery("firstname", "Guest")
		lastname := c.Query("lastname")
	})

//也可以通过c.ShouldBind()将JSON解析为结构体。

问题与解决

  • 在调用JSON()函数返回JSON格式信息之后,HandlerFunc并不会返回。如果HandlerFunc中多次调用JSON()函数,请求的返回中就会出现多条JSON格式字符串。及时加上return语句即可解决问题。
  • 上传文件的时候,文件本身的文件名是不可信的,需要在后端重命名后再保存。

总结

Gin框架易用性良好,学习成本较低,开发调试也十分的简单。在方便上手的同时也能够提供较高的性能,在很多场景下都是一个很好的选择。

参考链接

Gin框架使用总结

上一篇:执行make出现:make: *** No rule to make target `build'


下一篇:vue项目在vscode中编译eslint报错没显示红色波浪线提示