脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Golang - go语言beego框架分页器操作及接口频率限制示例

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

2022-09-24 14:10Jeff的技术栈 Golang

这篇文章主要为大家介绍了go语言beego框架分页器操作使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

获取所有文章数据

?
1
2
3
o := orm.NewOrm()
qs := o.QueryTable("Article")
12

获取总条数

?
1
2
count, _ := qs.Count()
1

设置每页的条数

?
1
2
pageSetNum := 2
1

总页数和当前页码

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

获取分页数据

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

返回数据

?
1
2
3
4
5
6
beego.Info(*articles)
this.Data["articles"] = *articles
this.Data["count"] = count
this.Data["pageCount"] = pageCount
this.Data["pageNum"] = pageNum
this.TplName = "index.html"

beego接口频率限制

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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框架分页器操作接口频率限制的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/guyouyin123/p/14084881.html

延伸 · 阅读

精彩推荐
  • GolangGolang TCP粘包拆包问题的解决方法

    Golang TCP粘包拆包问题的解决方法

    这篇文章主要给大家介绍了Golang TCP粘包拆包问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Golang具有一定的参考学习价值,需要...

    短路的鲍勃4992020-05-26
  • GolangGolang交叉编译(跨平台编译)的使用

    Golang交叉编译(跨平台编译)的使用

    本文主要介绍了Golang交叉编译(跨平台编译)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    x0249942022-08-08
  • Golang在Mac OS上安装Go语言编译器的方法

    在Mac OS上安装Go语言编译器的方法

    这篇文章主要介绍了在Mac OS上安装Go语言编译器的方法,Docker的兴起使得Go近来人气大幅攀升,需要的朋友可以参考下 ...

    脚本之家4282020-04-27
  • Golanggo语言匿名函数的使用

    go语言匿名函数的使用

    今天小编就为大家分享一篇关于go语言匿名函数的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    itdada4022020-05-25
  • Golang聊聊我的Go开发环境

    聊聊我的Go开发环境

    本篇聊聊我的go开发环境,我的电脑系统都是Linux桌面系统-Manjaro。...

    今日头条7312021-02-22
  • GolangGolang算法问题之整数拆分实现方法分析

    Golang算法问题之整数拆分实现方法分析

    这篇文章主要介绍了Golang算法问题之整数拆分实现方法,结合实例形式分析了Go语言数值运算与数组遍历相关操作技巧,需要的朋友可以参考下 ...

    books19582822020-05-05
  • Golang深入理解Go语言中的闭包

    深入理解Go语言中的闭包

    Go函数是可以闭包的。闭包是一个函数值,他来自函数体外部的变量引用。 下面这篇文章通过一个demo来进行深入的介绍了Go语言中闭包的相关资料,文中介...

    daisy4932020-05-06
  • GolangGo 结构体、数组、字典和 json 字符串的相互转换方法

    Go 结构体、数组、字典和 json 字符串的相互转换方法

    今天小编就为大家分享一篇Go 结构体、数组、字典和 json 字符串的相互转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    哆啦A梦~~5102020-05-27