How to get a value from map

Go

Go Problem Overview


Problem

Fetching data from map

Data Format
res = map[Event_dtmReleaseDate:2009-09-15 00:00:00 +0000 +00:00 Trans_strGuestList:<nil> strID:TSTB]
Note

How to get the following value from the above result

  1. Event_dtmReleaseDate
  2. strID
  3. Trans_strGuestList

What i tried:

  1. res.Map("Event_dtmReleaseDate");

> Error : res.Map undefined (type map[string]interface {} has no field or method Map)

  1. res.Event_dtmReleaseDate;

> Error: v.id undefined (type map[string]interface {} has no field or method id)

Go Solutions


Solution 1 - Go

Your variable is a map[string]interface {} which means the key is a string but the value can be anything. In general the way to access this is:

mvVar := myMap[key].(VariableType)

Or in the case of a string value:

id  := res["strID"].(string)

Note that this will panic if the type is not correct or the key does not exist in the map, but I suggest you read more about Go maps and type assertions.

Read about maps here: http://golang.org/doc/effective_go.html#maps

And about type assertions and interface conversions here: http://golang.org/doc/effective_go.html#interface_conversions

The safe way to do it without a chance to panic is something like this:

var id string
var ok bool
if x, found := res["strID"]; found {
     if id, ok = x.(string); !ok {
        //do whatever you want to handle errors - this means this wasn't a string
     }
} else {
   //handle error - the map didn't contain this key
}

Solution 2 - Go

In general to get value from map you have to do something like this:

package main

import "fmt"

func main() {
	m := map[string]string{"foo": "bar"}
	value, exists := m["foo"]
    // In case when key is not present in map variable exists will be false.
	fmt.Printf("key exists in map: %t, value: %v \n", exists, value)
}

Result will be:

key exists in map: true, value: bar

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkarthickView Question on Stackoverflow
Solution 1 - GoNot_a_GolferView Answer on Stackoverflow
Solution 2 - Gocn007bView Answer on Stackoverflow