go语言beego框架分页器操作及接口频率限制示例

 更新时间:2022年04月18日 09:43:04   作者:Jeff的技术栈  
这篇文章主要为大家介绍了go语言beego框架分页器操作使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

获取所有文章数据

o := orm.NewOrm()
qs := o.QueryTable("Article")
12

获取总条数

count, _ := qs.Count()
1

设置每页的条数

pageSetNum := 2
1

总页数和当前页码

//	总页数
pageCount := math.Ceil((float64(count) / float64(pageSetNum)))
//	获取当前页码
pageNum, err := this.GetInt("pageNum")
if err != nil {
	pageNum = 1
}
1234567

获取分页数据

//存储分页数据的切片
articles := new([]models.Article)
//获取分页数据
qs.Limit(pageSetNum, pageSetNum*(pageNum - 1)).All(articles)
1234

返回数据

beego.Info(*articles)
this.Data["articles"] = *articles
this.Data["count"] = count
this.Data["pageCount"] = pageCount
this.Data["pageNum"] = pageNum
this.TplName = "index.html"

beego接口频率限制

package utils
import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
	"github.com/astaxie/beego/logs"
	"github.com/ulule/limiter"
	"github.com/ulule/limiter/v3"
	"github.com/ulule/limiter/v3/drivers/store/memory"
	"net/http"
	"strings"
)
// RateLimiter this is a struct
type RateLimiter struct {
	Limiter     *limiter.Limiter
	Username    string
	UserType    string
	UserToken   string
	RemainTimes int
	MaxTimes    int
}
func RateLimit(rateLimit *RateLimiter, ctx *context.Context) {
	var (
		limiterCtx limiter.Context
		err        error
		req        = ctx.Request
	)
	opt := limiter.Options{
		IPv4Mask:           limiter.DefaultIPv4Mask,
		IPv6Mask:           limiter.DefaultIPv6Mask,
		TrustForwardHeader: false,
	}
	ip := limiter.GetIP(req, opt)

	if strings.HasPrefix(ctx.Input.URL(), "/") {
		limiterCtx, err = rateLimit.Limiter.Get(req.Context(), ip.String())
	} else {
		logs.Info("The api request is not track ")
	}
	if err != nil {
		ctx.Abort(http.StatusInternalServerError, err.Error())
		return
	}
	if limiterCtx.Reached {
		logs.Debug("Too Many Requests from %s on %s", ip, ctx.Input.URL())
		// refer to https://beego.me/docs/mvc/controller/errors.md for error handling
		ctx.Abort(http.StatusTooManyRequests, "429")
		return
	}
}
func PanicError(e error) {
	if e != nil {
		panic(e)
	}
}
func RunRate() {
	// 限制每秒登录的请求次数
	theRateLimit := &RateLimiter{}
	// 100 reqs/second: "100-S" "100-s"
	loginMaxRate := beego.AppConfig.String("total_rule::reqrate")
	loginRate, err := limiter.NewRateFromFormatted(loginMaxRate + "-s")
	PanicError(err)
	theRateLimit.Limiter = limiter.New(memory.NewStore(), loginRate)
	beego.InsertFilter("/*", beego.BeforeRouter, func(ctx *context.Context) {
		RateLimit(theRateLimit, ctx)
	}, true)
}

在main.go 里面调用方法即可

以上就是go语言beego框架分页器操作及接口频率限制示例的详细内容,更多关于go beego框架分页器操作接口频率限制的资料请关注脚本之家其它相关文章!

相关文章

  • go slice不同初始化方式性能及数组比较详解

    go slice不同初始化方式性能及数组比较详解

    这篇文章主要为大家介绍了go slice不同初始化方式性能及数组比较示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Golang 模块引入及表格读写业务快速实现示例

    Golang 模块引入及表格读写业务快速实现示例

    这篇文章主要为大家介绍了Golang模块引入及表格读写业务的快速实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • go-micro微服务JWT跨域认证问题

    go-micro微服务JWT跨域认证问题

    JWT 以 JSON 对象的形式安全传递信息。因为存在数字签名,因此所传递的信息是安全的,这篇文章主要介绍了go-micro微服务JWT跨域认证,需要的朋友可以参考下
    2023-01-01
  • Go源码字符串规范检查lint工具strchecker使用详解

    Go源码字符串规范检查lint工具strchecker使用详解

    这篇文章主要为大家介绍了Go源码字符串规范检查lint工具strchecker使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言接口的用法详解

    Go语言接口的用法详解

    本文详细讲解了Go语言接口的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • go并发实现素数筛的代码

    go并发实现素数筛的代码

    这篇文章主要介绍了go并发实现素数筛的代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Go语言实现的最简单数独解法

    Go语言实现的最简单数独解法

    前面给大家介绍过使用javascript实现的简单的数独解法,小伙伴们都非常喜欢,今天我们再来分享一则go语言实现的简单的数独解法,有需要的小伙伴来参考下。
    2015-03-03
  • Go gRPC教程实现Simple RPC

    Go gRPC教程实现Simple RPC

    这篇文章主要为大家介绍了Go gRPC教程实现Simple RPC示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言深度拷贝工具deepcopy的使用教程

    Go语言深度拷贝工具deepcopy的使用教程

    今天给大家推荐的工具是deepcopy,一个可以对指针、接口、切片、结构体、Map都能进行深拷贝的工具,感兴趣的小伙伴快跟随小编一起学习学习
    2022-09-09
  • 如何在Go中使用切片容量和长度

    如何在Go中使用切片容量和长度

    这篇文章主要介绍了如何在Go中使用切片容量和长度,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论