gin框架
gin是golang的一个后台WEB框架
简单案例
package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/ping", func(c *gin.Context) {//以json形式输出,还可以xml protobufc.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 userimport ("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 userimport ("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 routersimport ("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 mainimport ("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
}
测试