我有一部分代码有问题。我正在写狂欢框架(要清楚)。这是一个 Worker go 例程,我希望它做几件事:根据来源,切换 stat 变量的结构类型,那会来。我做了一个开关,但在所有其他代码都正确之前,我真的不知道开关是否正确编写。我获取日期的缓存,并将其放入新的工作项中。我将作品发送到频道这是我现在得到的:func worker(in <-chan Task, out chan <- Work, wg *sync.WaitGroup) { for t := range in { for sourceName, charts := range t.Request.Charts { var stat interface{} switch sourceName { case "noagg": stat = stat.([]NoaggModel) case "oracle": stat = stat.([]OracleModel) default: panic("Invalid type for Work model!") } w := Work{Name:"", Data:""} err := cache.Get(string(sourceName)+"_"+string(t.Date), &stat); for chart := range charts{ w.Name = chart["name"] if err == nil{ w.Data = countDataByName( stat, t.Request.Filters, string(chart["name"])) } out <- w } } } wg.Done() // this worker is now done; let the WaitGroup know.}但现在我得到了错误 invalid operation: chart["name"] (type int does not support indexing)但我有结构:type Chart struct { Name string `json:"name"` Type string `json:"type"`}type Filter struct { DayStart string `json:"dayStart"` DayEnd string `json:"dayEnd"` TimePeriods interface{} `json:"timePeriods"` Lines []string `json:"lines"`}type Task struct { Date string Request ChartOptins}type Work struct { Name string Data interface{}}如果缓存结构的类型可以不同,我应该如何以更好的方式编写正确的开关,为什么我的名字添加不好并且调用错误?
1 回答
万千封印
TA贡献1891条经验 获得超3个赞
切片中的 for 缺少一个变量
for chart := range charts{在切片上迭代时,第一个变量是键,第二个是您想要的实际值。在这种情况下,您可以省略键(一个 int),因此正确的指令应该是
for _, chart := range charts{- 1 回答
- 0 关注
- 419 浏览
添加回答
举报
0/150
提交
取消
