我在部分代码中遇到了麻烦.我正在写revel框架(要清楚).这是一个工作日常规,我希望它做几件事:
>切换stat变量的struct类型
来源,即将来临.我做了一个开关,但在所有其他之前
代码是正确的,我真的不知道是否写了开关
正常.
>我获取日期的缓存,并将其放入新的工作项.
>我发送工作到频道
这是我现在得到的:
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. }
但是现在我得到了无效操作的错误:chart [“name”](类型int不支持索引)
但我结构:
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{} }
如果缓存的结构类型可能不同,我应该如何以更好的方式编写正确的开关,为什么我的名称添加错误并且调用错误?
解决方法
切片中的for缺少变量
for chart := range charts{
在切片上迭代时,第一个变量是键,第二个变量是您想要的实际值.在这种情况下,您可以省略键(int),因此应该正确的指令
for _,chart := range charts{