// rate 包示例:带宽限速(按秒配额,超限时 Add 阻塞等待),常配合 conn 包做连接限速 package main import ( "fmt" "time" "git.zeroonesoft.cn/golib/zogo/rate" ) func main() { // 10Mbps 带宽(内部换算为 1310720 字节/秒的配额) r := rate.NewRate(10) r.Start() // 启动每秒配额重置 // 模拟写入流量:累计超过每秒配额后 Add 会阻塞,直到下一个配额周期 total := 0 for i := 0; i < 5; i++ { size := 512 * 1024 // 512KB start := time.Now() r.Add(size) total += size fmt.Printf("写入 %dKB,本次等待 %v,当前秒已用 %d 字节\n", size/1024, time.Since(start).Round(time.Millisecond), r.GetNow()) } fmt.Println("累计写入:", total, "字节") // 运行期间可动态调整限速(0 表示不限制) r.SetLimit(0) fmt.Println("已取消限速") // 取出并清零当前秒用量 fmt.Println("ResetMax:", r.ResetMax()) }