2 回答
TA贡献1848条经验 获得超2个赞
您可以像这样为循环缓冲区实现数据结构
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{} 以便可以使用任何类型的数据
TA贡献1847条经验 获得超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 关注
- 94 浏览
添加回答
举报