Gin 控制器的继承,自定义方法
Gin 控制器的继承,自定义方法
1 我们想直接获取到int类型的数据怎么办
/*
当我们获取Get参数时都时获取到的都是string类型,有时候我们想直接获取到int类型,我们就需要转换,如果需要转换的地方多了也会很麻烦,
那我们可以怎么办
解决办法很简单,我们可以写一个baseController 来实现这些功能,并且让每一个controller都继承它,这样我们只需要在baseController中实现我们想要实现的方法就行了。
*/
2 编写baseController.go
创建一个baseController文件夹
package baseController
import (
"github.com/gin-gonic/gin"
"net/http"
"strconv"
)
type BaseController struct{}
func (b BaseController) Success(c *gin.Context) {
c.String(http.StatusOK, "成功")
}
func (b BaseController) Error(c *gin.Context) {
c.String(http.StatusBadRequest, "失败")
}
// 将获取的get参数转换成int输出
func (b BaseController) GetQueryToInt(c *gin.Context, key string) int {
data := c.DefaultQuery(key, "1")
res, _ := strconv.Atoi(data)
return res
}
3 使用
package api
import (
"awesomeProject/gin/controllers/baseController"
"fmt"
"github.com/gin-gonic/gin"
)
type ApiController struct {
baseController.BaseController
}
func (con ApiController) Api(c *gin.Context) {
con.Success(c)
}
// http://127.0.0.1:8000/api/userlist?page=10
func (con ApiController) ApiUserList(c *gin.Context) {
page := con.GetQueryToInt(c, "page")
fmt.Printf("type=%T,value=%v", page, page) // 15:17:44 app | type=int,value=10
c.String(200, "我是一个api接口userlist")
}
func (con ApiController) ApiPlist(c *gin.Context) {
c.String(200, "我是一个api接口plist")
}
func (con ApiController) ApiCart(c *gin.Context) {
c.String(200, "我是一个api接口cart")
}