我在创建一个空的地图并在另一个地图上循环时向其添加新数据时遇到问题。
这是我在IDE上遇到的错误。
这是我要添加到地图上的数据结构。
type Outcome struct {
QuestionIndex string
ChoiceIndex int64
Correct bool
}
func createEntryOutcome(e *entry.Entry) map[string]interface{} {
entryPicks := e.Live.Picks
outcomes := make(map[string]interface{})
for idx, pick := range entryPicks {
mappedPick := pick.(map[string]interface{})
outcomes = append(outcomes, Outcome{
QuestionIndex: idx,
ChoiceIndex: mappedPick["index"].(int64),
Correct: mappedPick["correct"].(bool),
})
}
return outcomes
}
我基本上希望将类似以下内容的内容保存在数据库中。
[
{
qIndex: "1",
cIndex: 1,
correct: false,
},
{
qIndex: "1",
cIndex: 1,
correct: false,
},
]
我是golang的新手,我们将为您提供帮助。谢谢
答案 0 :(得分:1)
该错误清楚地表明:
附加的第一个参数必须是slice;具有map [string] interface {}
这意味着您需要先创建一个切片,然后再将数据附加到实际上是结果切片的结果上,就像您在想要的输出中提到的那样。
append函数将元素x附加到slice s的末尾, 并在需要更大容量的情况下扩大切片。
创建一个outcomes
的切片,然后将entryPicks
中的数据附加到该切片:
outcomes := make([]map[string]interface{})
for idx, pick := range entryPicks {
mappedPick := pick.(map[string]interface{})
outcomes = append(outcomes, Outcome{
QuestionIndex: idx,
ChoiceIndex: mappedPick["index"].(int64),
Correct: mappedPick["correct"].(bool),
})
}
这将使您提供所需的结果。
答案 1 :(得分:1)
type Outcome struct {
QuestionIndex string
ChoiceIndex int64
Correct bool
}
func createEntryOutcome(e *entry.Entry) map[string]interface{} {
entryPicks := e.Live.Picks
var outcomes []Outcome
for idx, pick := range entryPicks {
mappedPick := pick.(map[string]interface{})
outcomes = append(outcomes, Outcome{
QuestionIndex: idx,
ChoiceIndex: mappedPick["index"].(int64),
Correct: mappedPick["correct"].(bool),
})
}
return outcomes
}
将 结果:= make(map [string] interface {}) 更改为 各种结果[]结果 >