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

I'm having a problem with creating an empty map and append new data to it while looping on another map.

this is the error i'm getting on my IDE.

enter image description here

here's my data struct to be added to the map.

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
}

i basically want something like below to be saved in the database.

[
  {
    qIndex: "1",
    cIndex: 1,
    correct: false,
  },
  {
    qIndex: "1",
    cIndex: 1,
    correct: false,
  },
]

im new to golang and any help is appreciated. thanks

As the error clearly says:

first argument to append must be slice; have map[string]interface{}

which means you need to create a slice before appending the data to outcomes which is actually slice of outcomes, like you have mentioned in the output you want.

The append function appends the elements x to the end of the slice s, and grows the slice if a greater capacity is needed.

Create a slice of outcomes and then append the data from entryPicks to that slice:

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),
    })
}

which will let you provide the outcome you want.

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
}

change outcomes := make(map[string]interface{}) to var outcomes []Outcome