为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 中调用函数后更新函数的值

如何在 golang 中调用函数后更新函数的值

Go
慕码人2483693 2023-02-14 19:41:26
我在一个系统上工作,我必须限制来自特定 IP 的并发连接。建立连接后,将执行一些步骤,然后将其删除,以便可以建立其他连接。下面是我更新特定变量值的代码。代码链接 - http://tpcg.io/_SQZEEXpackage mainimport "fmt"var addresses = make([]string, 0)func count(rAddr string, slice *[]string) map[string]int {    dict := make(map[string]int)    *slice = append(*slice, rAddr)    for _, a := range *slice {    dict[a]++    }    return dict}func listen() int {    var rAddr string    rAddr = "1.1.1.2"    number_of_addresses:=count(rAddr ,&addresses)    var v int    for k, v := range number_of_addresses {    fmt.Println(k, "value is", v)        if (v > 0) {            v--            fmt.Println(k, "decreased value is", v)        }    }    return v}func main() {    listen()    listen()}再次调用该函数时,“v”变量的值不会刷新,输出如下1.1.1.2 value is 11.1.1.2 decreased value is 01.1.1.2 value is 21.1.1.2 decreased value is 1预期输出:1.1.1.2 value is 11.1.1.2 decreased value is 01.1.1.2 value is 11.1.1.2 decreased value is 0我该怎么做才能在每次减少时更新该值。我知道该值已刷新但未发送回计数函数。如何实现
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

根据我的意见,重构以通过mapie a跟踪 IP 地址map[string]int以跟踪使用情况。


一个让你入门的基本实现:


// 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


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号