Search code examples
goamazon-dynamodbaws-sdk-go

aws-sdk-go dynamodbattribute unmarshal list of maps not unmarshalling


I have a Dynamodb Table that has the following struct:

type StatusItem struct {
    requestStatus string
    timestamp string
    RequestId string
}

I have the code as such:

items := []StatusItem{}
err = dynamodbattribute.UnmarshalListOfMaps(result.Items, &items)
if err != nil {
    exitWithError(fmt.Errorf("failed to unmarshal Query result items, %v", err))
}

// Print out the items returned
for i, item := range items {
    fmt.Println(i)
    fmt.Printf(item.RequestId, item.requestStatus)
}

However, items is empty.

when i put a watcher in items, i can see the it unmarshals to the struct, but all the values are empty.

if i do: log.println(result.items) i can see the values there (though a bit ugly)

%!(EXTRA string=)[map[timestamp:{
  S: "2018-04-18 12:04:43.761"
} RequestId:{
  S: "9"
} requestStatus:{
  S: "REQUEST_RECEIVED"
}]

what am i doing wrong?


Solution

  • Thanks to @Peter for pointing me in the right direction.

    The solution is simple (though rather dumb that that was the case).

    as noted in : https://til.hashrocket.com/posts/3512417fb0-private-vs-public-struct-members

    lowercase starting members are private, and Capital was public.

    in order to get it working correctly, i needed to update my struct from:

    type StatusItem struct {
        requestStatus string
        timestamp string
        RequestId string
    }
    

    to:

    type StatusItem struct {
        RequestStatus string
        Timestamp string
        RequestId string
    }