令牌桶限流算法

 下面我们通过使用redis实现一个简单通用的令牌桶限流算法解决问题 令牌桶算法主要是以桶的容量为基准,以固定的时间来生产令牌,有效的解决了漏桶效率不高的问题具体实现创建redis对象并定义缓存键$redis = $this->connect(); $key = "aaaaa";开启 watch 并定义定义每分钟最大请求数量$current_time = time(); $max_count = 320; $total_s = 60; $redis->watch($key);计算平均值用于限制每秒请求数量$rate = (int)(($max_count / $total_s) * ($current_time - ¥result_array["time"]));取出最大容量与桶内容量最小值$num = min($max_count, ($result_array["num"] + $rate));判断令牌数/* 令牌小于0 */ if ($num <= 0) { return false; }重新保存令牌$result = json_encode(["num" =>...

PHP,Golang,.Net,解决方案,其他 2023-03-21 AM 556次 0条

golang切片(slice)基本操作

 本篇主要以简洁明了的方式记录分享 go 语言 slice 切片的基本使用操作,以及 go 在使用 slice 切片过程中的注意事项等等。golang切片(slice)创建可以使用make创建一个长度(len)为16的切片可以使用make创建一个长度(len)为16,cap为32 的切片var s []int var s []int={2,3,4,5} // 可以使用make创建一个长度(len)为16的切片 s := make([]int ,16 ) // 可以使用make创建一个长度(len)为16,cap为32 的切片 s := make([]int ,16 ,32)用golang内置函数(append)追加切片(slice)s1 := []int{0,1,2,3,4,5,6,7} s2 :=append(s1,10) s3 := append(s2,11) s4 := append(s3,12,13,14)用golang内置函数(cope)拷贝切片(slice)s1 := []int s2 := []int{2,3,4} cope(s2,s1) fmt....

Golang 2021-11-26 AM 1068次 0条

go安装gin web框架

 gin是一个用 Go(Golang) 编写的 web框架 ,它采用了类似 martini-like 的API,由于 httprouter ,其性能提高了40倍,如果你需要高性能和高生产率,下面我们来演示下怎么安装 gin web 框架。gin开源框架地址https://github.com/gin-gonic/gin#installation安装gin使用相关扩展//下载插件工具(安装gin前,先安装gopm这个工具) go get -v github.com/gpmgo/gopm //自动导入包插件 gopm get -g -v golang.org/x/tools/cmd/goimports //转码插件 gopm get -g -v golang.org/x/text //自动检测网页编码 gopm get -g -v golang.org/x/net/html安装gin矿建步骤流程安装完成测试是否安装成功package main import "github.com/gin-gonic/gin" func main() { r := gin.Defau...

Golang 2021-10-11 PM 537次 0条

go引入使用包异常cannot resolve symbol 'xxx'

 本文主要解决 golang 引入使用 gin包 的时候异常 cannot resolve symbol 'xxx' 这个问题一般比较 熟悉go语言 的同学一眼就知道怎么解决了,本文主要记录下以供其他新同学 排查问题 使用。go出现 cannot resolve symbol 异常原因 go.mod 文件没有 require 包,或者没有初始化 go.mod 解决 cannot resolve symbol 'xxx' 异常go mod init gin go mod edit -require github.com/gin-gonic/gin@latest 使用 go.mod 注意事项go使用go mod加速依赖管理 关于 go引入使用包异常cannot resolve symbol 'xxx' 通过以上方法已经完美解决了。

Golang,解决方案 2021-09-28 PM 1400次 0条

golang使用packr包把静态资源文件打包进二进制应用内

 当开发 fdem-os 时候 以为想把应用做成直接的单一启用文件,所以说一直再思考怎么把 静态文件 html以及一些css,js一类的文件给打包到应用内而不用通过程序下载在去加载,这样及方便使用又保证了代码的安全性,最终发现 golang 可以完美实现需求的 packr 第三方包。 通过 packr 我们可以完美的将静态资源打包进应用程序,并开启一个 http服务 以供使用。golang packr 包文档 packr项目文档地址 目前最新版本为 v2.8.1 版本,推荐使用 v2 版本进行开发。packr 包 官方介绍Packr is a simple solution for bundling static assets inside of Go binaries. Most importantly it does it in a way that is friendly to developers while they are developing Packr是将静态资产捆绑到 Go 二进制文件中的简单解决方案。最重要的是,它以对开发人员在开发期间友好的方式进行。 可以看...

软件工具,Golang,解决方案 2021-09-24 PM 940次 0条

go使用go mod加速依赖管理

 我们使用 go mod 可以很方便的管理使用 go 第三库,但是国内引用第三方库时候因为国内网络环境问题会非常慢,甚至可以说经常获取不到,今天我们就讲一下怎么加速 go mod 包下载。 go mod 国内代理提供商源站地址备注七牛云https://goproxy.cn/中国最可靠的 Go 模块代理 (推荐)goproxy.iohttps://goproxy.io/一个全球代理为 Go 模块而生 (推荐)阿里云http://mirrors.aliyun.com/goproxy/阿里云 go module公共代理仓库nexus社区https://gonexus.dev/为社区而制作怎么使用 go mod 国内代理go 1.13 及以上,配置go mod 国内代理(推荐)go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,directmac 或 linux 配置go mod 国内代理export GO111MODULE=on export GOPROXY=https://goproxy.cn # 还可以设置不...

Golang,解决方案 2021-09-24 PM 1462次 0条

Go使用自定义包导入后打包异常解决

遇到的问题(build command-line-arguments: cannot find module for path)某个小功能一直使用的单文件进行打包编译,突然有一天慢慢变大了这个时候需要分包处理,分包处理后进行 go build xx 打包 然后就出现了异常 build command-line-arguments: cannot find module for path xxxx,然后不断地找寻原因最终找到了一个正确的解决方案,一下是处理步骤build command-line-arguments: cannot find module for path xxxx示例项目目录结构myProject -src --logic ---logic1.go ---logic2.go -main.gomain.gopackage main import ( "./src/logic" ) func main() { logic.Run(address, thread) } logic1.gopackage logic func Run() { // xxx...

Golang 2021-08-26 PM 827次 0条