第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在 golang 中調(diào)用函數(shù)后更新函數(shù)的值

如何在 golang 中調(diào)用函數(shù)后更新函數(shù)的值

Go
慕碼人2483693 2023-02-14 19:41:26
我在一個系統(tǒng)上工作,我必須限制來自特定 IP 的并發(fā)連接。建立連接后,將執(zhí)行一些步驟,然后將其刪除,以便可以建立其他連接。下面是我更新特定變量值的代碼。代碼鏈接 - 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()}再次調(diào)用該函數(shù)時,“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預(yù)期輸出: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我該怎么做才能在每次減少時更新該值。我知道該值已刷新但未發(fā)送回計數(shù)函數(shù)。如何實現(xiàn)
查看完整描述

1 回答

?
慕俠2389804

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


查看完整回答
反對 回復(fù) 2023-02-14
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號