我有一部分代碼有問題。我正在寫狂歡框架(要清楚)。這是一個(gè) Worker go 例程,我希望它做幾件事:根據(jù)來源,切換 stat 變量的結(jié)構(gòu)類型,那會(huì)來。我做了一個(gè)開關(guān),但在所有其他代碼都正確之前,我真的不知道開關(guān)是否正確編寫。我獲取日期的緩存,并將其放入新的工作項(xiàng)中。我將作品發(fā)送到頻道這是我現(xiàn)在得到的: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.}但現(xiàn)在我得到了錯(cuò)誤 invalid operation: chart["name"] (type int does not support indexing)但我有結(jié)構(gòu):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{}}如果緩存結(jié)構(gòu)的類型可以不同,我應(yīng)該如何以更好的方式編寫正確的開關(guān),為什么我的名字添加不好并且調(diào)用錯(cuò)誤?
1 回答

萬千封印
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
切片中的 for 缺少一個(gè)變量
for chart := range charts{
在切片上迭代時(shí),第一個(gè)變量是鍵,第二個(gè)是您想要的實(shí)際值。在這種情況下,您可以省略鍵(一個(gè) int),因此正確的指令應(yīng)該是
for _, chart := range charts{
- 1 回答
- 0 關(guān)注
- 362 瀏覽
添加回答
舉報(bào)
0/150
提交
取消