在Go中将struct与API调用结合使用

I'm new to Go and working hard to follow its style and I'm not sure how to proceed.

I want to push a JSON object to a Geckoboard leaderboard, which I believe requires the following format based on the API doc and the one for leaderboards specifically:

{
  "api_key": "222f66ab58130a8ece8ccd7be57f12e2",
  "data": {
     "item": [
        { "label": "Bob", "value": 4, "previous_value": 6 },
        { "label": "Alice", "value": 3, "previous_value": 4 }
      ]
  }
}

My instinct is to build a struct for the API call itself and another called Contestants, which will be nested under item. In order to use json.Marshall(Contestant1), the naming convention of my variables would not meet fmt's expectations:

// Contestant structure to nest into the API call
type Contestant struct {
    label  string
    value int8
    previous_rank int8  
}

This feels incorrect. How should I configure my Contestant objects and be able to marshall them into JSON without breaking convention?

To output a proper JSON object from a structure, you have to export the fields of this structure. To do it, just capitalize the first letter of the field.

Then you can add some kind of annotations, to tell your program how to name your JSON fields :

type Contestant struct {
    Label  string `json:"label"`
    Value int8 `json:"value"`
    PreviousRank int8 `json:"previous_rank"` 
}