Gin 控制器的继承,自定义方法

Gin 控制器的继承,自定义方法

1 我们想直接获取到int类型的数据怎么办

/*
	当我们获取Get参数时都时获取到的都是string类型,有时候我们想直接获取到int类型,我们就需要转换,如果需要转换的地方多了也会很麻烦,
	那我们可以怎么办
	
	解决办法很简单,我们可以写一个baseController 来实现这些功能,并且让每一个controller都继承它,这样我们只需要在baseController中实现我们想要实现的方法就行了。
	
*/

2 编写baseController.go

创建一个baseController文件夹

pFFdfFx.png

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")
}

pFFdXkt.png

posted @ 2024-01-17 11:00  春游去动物园  阅读(32)  评论(0编辑  收藏  举报