Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者,你会爱上 Gin。两款Web框架相比较,Gin自己说他比Martini要强很多。
2、Gin的基本使用方法首先在项目终端下载安装gin包:
go get -u github.com/gin-gonic/gin
举一个简单的例子:
package main
import "github.com/gin-gonic/gin"
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/ping", func(c *gin.Context) { // /ping是路由
//输出json结果给调用方
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run(":8081") // 可以从本地的127.0.0.1:8081访问,不填的话,默认是8080端口
}
go run main.go 运行程序,打开浏览器访问http://127.0.0.1:8081/ping
页面,最终显示:
{"message":"pong"} // 这就是返回给前端的数据
3、Gin框架中的路由使用
gin路由,路由的基本使用,按路由组分组处理请求
package main
import (
"github.com/gin-gonic/gin"
"fmt"
)
// gin的helloWorld
func main() {
// 1.创建路由
r := gin.Default()
// 路由组1 ,处理GET请求
v1 := r.Group("api/v1")
// {} 是书写规范
{
v1.GET("/register", register)
v1.GET("login", login)
}
v2 := r.Group("api/v2")
{
v2.POST("/register", register)
v2.POST("/login", login)
}
r.Run(":8000") // 开启端口在8000
}
func login(c *gin.Context) {
name := c.DefaultQuery("name", "jack")
c.String(http.StatusOK, fmt.Sprintf("hello %s\n", name))
}
func register(c *gin.Context) {
name := c.DefaultQuery("name", "lily")
c.String(http.StatusOK, fmt.Sprintf("hello %s\n", name))
}
4、gin中的数据绑定 gin数据解析和绑定(JSON举例)
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义接收数据的结构体
type Login struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
User string `json:"user" binding:"required"`
Pssword string `json:"password" binding:"required"`
}
func main() {
// 1.创建路由
r := gin.Default()
// JSON绑定
r.POST("loginJSON", func(c *gin.Context) {
// new结构体,给结构体分配内存
login := new(Login)
// 将request的body中的数据,自动按照json格式解析到结构体
if err := c.ShouldBindJSON(&login); err != nil {
// 返回错误信息
// gin.H封装了生成json数据的工具
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"status": "200"})
})
r.Run(":8000")
}
5、gin的中间件使用 next()方法!
func myMiddleWare() gin.HandlerFunc {
return func(ctx *gin.Context) {
fmt.Println("before")
ctx.Next()
fmt.Println("after")
}
}
// Next()函数相当于一个分割线,在Next()函数之前的在Handler之前执行,Next()函数之后的在Handler之后执行
Gin中间件
// 定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:
package main
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
)
// 定义中间
func myTime(c *gin.Context) {
start := time.Now()
c.Next()
// 统计时间
since := time.Since(start)
fmt.Println("程序用时:", since)
}
func main() {
// 1.创建路由
// 默认使用了2个中间件Logger(), Recovery()
r := gin.Default()
// 注册中间件
r.Use(myTime)
// {}为了代码规范
shoppingGroup := r.Group("/shopping")
{
shoppingGroup.GET("/index", shopIndexHandler)
shoppingGroup.GET("/home", shopHomeHandler)
}
r.Run(":8000")
}
func shopIndexHandler(c *gin.Context) {
time.Sleep(5 * time.Second)
}
func shopHomeHandler(c *gin.Context) {
time.Sleep(3 * time.Second)
}
//可以试试 打印结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)