gin框架
gin是golang的一个后台WEB框架
简单案例
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
//以json形式输出,还可以xml protobuf
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
上面代码是gin github 上的一个简单案例,Gin-Context 实现了对request和response的封装,是Gin的核心实现之一,学习使用gin框架就是学习使用Context包的过程。其内部封装了request 和response 过程中的数据
API以及版本控制
gin可以通过api分组的形式控制API版本
先看下面两组api
user.go
package user
import (
"github.com/gin-gonic/gin"
"net/http"
)
func Add(c *gin.Context) {
// 都是gin.context作为入参
c.JSON(http.StatusOK, gin.H{
"method": c.Request.Method,
"path": c.Request.URL.Path,
})
}
func Get(c *gin.Context) {
// 都是gin.context作为入参
c.JSON(http.StatusOK, gin.H{
"method": c.Request.Method,
"path": c.Request.URL.Path,
})
}
user_v2.go
package user
import (
"github.com/gin-gonic/gin"
"net/http"
)
func AddV2(c *gin.Context) {
// 都是gin.context作为入参
c.JSON(http.StatusOK, gin.H{
"method": c.Request.Method,
"path": c.Request.URL.Path,
})
}
func GetV2(c *gin.Context) {
// 都是gin.context作为入参
c.JSON(http.StatusOK, gin.H{
"method": c.Request.Method,
"path": c.Request.URL.Path,
})
}
路由初始化
package routers
import (
"github.com/gin-gonic/gin"
"goGin/user"
)
func InitRouters(r *gin.Engine) {
//使用路由分组
api := r.Group("api")
initUser(api)
}
func initUser(group *gin.RouterGroup) {
// 路由分组
v1 := group.Group("/v1")
{
// /api/v1/course
// 路径携带参数
v1.GET("/user/:id", user.Get)
v1.POST("/user/:id", user.Add)
}
// v2版本
v2 := group.Group("v2")
{
v2.GET("/user/:id", user.GetV2)
v2.POST("/user/:id", user.AddV2)
}
}
package main
import (
"github.com/gin-gonic/gin"
"goGin/routers"
)
func main() {
r := gin.Default()
routers.InitRouters(r)
r.Run(":8080") // listen and serve on 0.0.0.0:8080
}
测试