2 回答

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ù)

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}
}
}
}
- 2 回答
- 0 關注
- 145 瀏覽
添加回答
舉報