golang,int 类型不支持索引

我有一部分代码有问题。我正在写狂欢框架(要清楚)。这是一个 Worker go 例程,我希望它做几件事:

  1. 根据来源,切换 stat 变量的结构类型,那会来。我做了一个开关,但在所有其他代码都正确之前,我真的不知道开关是否正确编写。

  2. 我获取日期的缓存,并将其放入新的工作项中。

  3. 我将作品发送到频道

这是我现在得到的:

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{}

}

如果缓存结构的类型可以不同,我应该如何以更好的方式编写正确的开关,为什么我的名字添加不好并且调用错误?


杨__羊羊
浏览 420回答 1
1回答

万千封印

切片中的 for 缺少一个变量for&nbsp;chart&nbsp;:=&nbsp;range&nbsp;charts{在切片上迭代时,第一个变量是键,第二个是您想要的实际值。在这种情况下,您可以省略键(一个 int),因此正确的指令应该是for&nbsp;_,&nbsp;chart&nbsp;:=&nbsp;range&nbsp;charts{
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go