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

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

初始化地圖問題

初始化地圖問題

Go
波斯汪 2023-05-08 18:04:38
我正在開發(fā)一個項目,我需要聲明以下內容:mapDataPayload := make(map[string][]*dataPayload)如果我向它附加數(shù)據(jù),它會正常工作。mapDataPayload := make(map[string][]*dataPayload)for {    select {    case rcvData := <-ch:        mapDataPayload[rcvData.Topic] = append(            mapDataPayload[rcvData.Topic],            &dataPayload{Message: rcvData.Message},        )    }}但是,我想設置一個大小限制。隨著追加,它會不停地增長。我想要實現(xiàn)的是當達到限制(最大值:100)時,它會覆蓋索引 0、1、2 ...mapDataPayload[rcvData.Topic][0]mapDataPayload[rcvData.Topic][1]我嘗試用以下方法初始化以下內容:make(map[string][]*dataPayload, 100)for {    select {    case rcvData := <-ch:        mapDataPayload[rcvData.Topic][0] = &dataPayload{Message: rcvData.Message}    }}但是,如果我檢查長度,它將返回 0。用直接初始化 (mapDataPayload[rcvData.Topic][0]) 替換 append 會立即導致錯誤。所以,我想要做的是用一個限制填充 map[string][]*dataPayload,例如這個數(shù)據(jù):{  "test1": {    "0": {      "Message": "Heasdllo"    },    "1": {      "Message": "Hel132lo"    },    "2": {      "Message": "Hedsallo"    }  },  "testanother": {    "0": {      "Message": "adsad"    },    "1": {      "Message": "Helwqe2lo"    },    "2": {      "Message": "Hel21321lo"    },    "3": {      "Message": "Hel21321lo"    }  }}當它達到數(shù)字 100 時,我想回到數(shù)字 0、1、2...
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

您可以像這樣為循環(huán)緩沖區(qū)實現(xiàn)數(shù)據(jù)結構


package main


import (

    "fmt"

)


type Circle struct  {

   Size int

   Contents []interface{}

   Pointer int

}


func (c *Circle) Setup(n int) {

   (*c).Size=n

   (*c).Contents=make([]interface{},n)

}


func (c *Circle) Add(value interface{}) {

   (*c).Contents[(*c).Pointer] = value

   (*c).Pointer = ((*c).Pointer+1) % (*c).Size

}



func main() {

        mapDataPayload := make(map[string]*Circle)

        mapDataPayload["aaa"]=&Circle{}

        mapDataPayload["aaa"].Setup(10)

    for i:=0; i<9999; i++ {

      mapDataPayload["aaa"].Add(i)

    }

    mapDataPayload["aaa"].Add("banana")

    fmt.Println(mapDataPayload["aaa"].Contents)


}

更新為使用 interface{} 以便可以使用任何類型的數(shù)據(jù)


查看完整回答
反對 回復 2023-05-08
?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

像這樣使用:


for {

    select {

    case rcvData := <-ch:


        _, exists := mapDataPayload[rcvData.Topic]

        if !exists {

            mapDataPayload[rcvData.Topic] = []*dataPayload{}

        }

        if len(mapDataPayload[rcvData.Topic]) < 100 {

            mapDataPayload[rcvData.Topic] = append(

                mapDataPayload[rcvData.Topic],

                &dataPayload{Message: rcvData.Message},

            )

        } else {

            mapDataPayload[rcvData.Topic][len(mapDataPayload[rcvData.Topic]) % 100] = &dataPayload{Message: rcvData.Message}

        }

    }

}


查看完整回答
反對 回復 2023-05-08
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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