syncx.Limit
syncx 包提供了一种管理并发请求的限流机制。通过定义一个 Limit 类型,可以控制同时进行的请求数量。
变量
ErrLimitReturn
var ErrLimitReturn = errors.New("discarding limited token, resource pool is full, someone returned multiple times")
ErrLimitReturn 表示当归还的元素超过借用的数量时,资源池已满的错误信息。
类型
Limit
type Limit struct {pool chan lang.PlaceholderType}
Limit 是一个包含带缓冲通道 pool 的结构体,用于控制并发请求的数量。
函数
NewLimit
func NewLimit(n int) Limit
NewLimit 创建一个可以同时借用 n 个元素的 Limit 实例。
参数
n(int): 可同时借用的元素数量。
返回值
Limit: 一个新的Limit实例。
Borrow
func (l Limit) Borrow()
Borrow 方法以阻塞模式借用一个元素。
Return
func (l Limit) Return() error
Return 方法归还借用的资源。如果归还的资源超过借用的数量,则返回错误 ErrLimitReturn。
返回值
error: 如果归还成功返回nil,否则返回ErrLimitReturn错误。
TryBorrow
func (l Limit) TryBorrow() bool
TryBorrow 方法以非阻塞模式尝试借用一个元素。
返回值
bool: 如果成功借用,返回true,否则返回false。
用法示例
package mainimport ("fmt""log""syncx")func main() {limit := syncx.NewLimit(2)if limit.TryBorrow() {fmt.Println("Successfully borrowed the first token.")} else {fmt.Println("Failed to borrow the first token.")}if limit.TryBorrow() {fmt.Println("Successfully borrowed the second token.")} else {fmt.Println("Failed to borrow the second token.")}if limit.TryBorrow() {fmt.Println("Successfully borrowed the third token.")} else {fmt.Println("Failed to borrow the third token.")}err := limit.Return()if err != nil {log.Println("Error returning token:", err)} else {fmt.Println("Successfully returned a token.")}err = limit.Return()if err != nil {log.Println("Error returning token:", err)} else {fmt.Println("Successfully returned a token.")}}