为了账号安全,请及时绑定邮箱和手机立即绑定

golang,int 类型不支持索引

golang,int 类型不支持索引

Go
杨__羊羊 2021-12-13 10:49:11
我有一部分代码有问题。我正在写狂欢框架(要清楚)。这是一个 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{


查看完整回答
反对 回复 2021-12-13
  • 1 回答
  • 0 关注
  • 419 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号