亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號