gpt4 book ai didi

golang,int类型不支持索引

转载 作者:IT王子 更新时间:2023-10-29 00:53:51 24 4
gpt4 key购买 nike

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

  1. 切换stat变量的struct类型,根据来源,那会来的。我做了一个转换,但在所有其他之前代码是正确的,我真的不知道是否写了switch适本地。

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

  3. 我把作品发到 channel

这是我现在得到的:

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

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

最佳答案

slice 中的for缺少一个变量

for chart := range charts{

在 slice 上迭代时,第一个变量是键,第二个是您想要的实际值。在这种情况下,您可以省略 key (一个 int),因此正确的指令应该是

for _, chart := range charts{

关于golang,int类型不支持索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35335416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com