go語言beego框架分頁器操作及接口頻率限制示例
更新時間:2022年04月18日 09:43:04 作者:Jeff的技術(shù)棧
這篇文章主要為大家介紹了go語言beego框架分頁器操作使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
獲取所有文章數(shù)據(jù)
o := orm.NewOrm()
qs := o.QueryTable("Article")
12
獲取總條數(shù)
count, _ := qs.Count() 1
設置每頁的條數(shù)
pageSetNum := 2 1
總頁數(shù)和當前頁碼
// 總頁數(shù)
pageCount := math.Ceil((float64(count) / float64(pageSetNum)))
// 獲取當前頁碼
pageNum, err := this.GetInt("pageNum")
if err != nil {
pageNum = 1
}
1234567
獲取分頁數(shù)據(jù)
//存儲分頁數(shù)據(jù)的切片 articles := new([]models.Article) //獲取分頁數(shù)據(jù) qs.Limit(pageSetNum, pageSetNum*(pageNum - 1)).All(articles) 1234
返回數(shù)據(jù)
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() {
// 限制每秒登錄的請求次數(shù)
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 里面調(diào)用方法即可
以上就是go語言beego框架分頁器操作及接口頻率限制示例的詳細內(nèi)容,更多關(guān)于go beego框架分頁器操作接口頻率限制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang 模塊引入及表格讀寫業(yè)務快速實現(xiàn)示例
這篇文章主要為大家介紹了Golang模塊引入及表格讀寫業(yè)務的快速實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
Go源碼字符串規(guī)范檢查lint工具strchecker使用詳解
這篇文章主要為大家介紹了Go源碼字符串規(guī)范檢查lint工具strchecker使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06

