1 回答

TA貢獻(xiàn)1719條經(jīng)驗 獲得超6個贊
根據(jù)我的意見,重構(gòu)以通過mapie a跟蹤 IP 地址map[string]int以跟蹤使用情況。
一個讓你入門的基本實現(xiàn):
// track unique addresses via a map:
// - key: string of the IP address
// - value: usage count
var (
usageMap = make(map[string]int) //
l sync.Mutex // ensure concurrent access to map is synchronized
)
func modifyAddr(addr string, delta int) int {
l.Lock()
defer l.Unlock()
usageMap[addr] += delta
return usageMap[addr]
}
func incAddr(addr string) int { return modifyAddr(addr, 1) }
func decAddr(addr string) int { return modifyAddr(addr, -1) }
并使用:
const maxConcurrentUsage = 20
func listen() {
rAddr := "1.1.1.2"
usage := incAddr(rAddr)
defer decAddr(rAddr)
if usage > maxConcurrentUsage {
log.Printf("maximum concurrent usage exceeded (%d) for address: %q", maxConcurrentUsage, rAddr)
return
}
// handler logic goes here
}
https://go.dev/play/p/Jvx8l4F9OE8
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報