我们如何创建一个空地图并在golang中添加新数据?

时间:2018-09-24 02:25:07

标签: go

我在创建一个空的地图并在另一个地图上循环时向其添加新数据时遇到问题。

这是我在IDE上遇到的错误。

enter image description here

这是我要添加到地图上的数据结构。

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的新手,我们将为您提供帮助。谢谢

2 个答案:

答案 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 {}) 更改为 各种结果[]结果 >