What's the difference between map[type] interface{} and type struct {}?

I just read that map[Type]interface{} specifies a map of keys of type Type with values any i.e. interface{}.

Isn't this almost the same as defining a structure i.e. type Name struct{ key1; value1, ...., keyn: valuen}?

What is the difference between those two types of mappings?

I read https://www.digitalocean.com/community/tutorials/how-to-use-json-in-go but I still don't get the difference.

Or is the difference that with map[type] interface{} we define in a more general way?

And with struct we define each key value pair?

And both of them are just ways to define objects which consist of key value pairs?


  • Structs and maps are different data structures. They have many differences. Here are just a few:

    A struct has a fixed number of fields that are declared once and can't change.

    point := struct{ x, y float64 }{
        x: 1.0,
        y: 1.0,

    A map can grow or shrink at runtime.

    vector := map[string]float64{
        "x": 2.0,
        "y": 2.0,
    vector["z"] = 2.0

    You can loop over map entries.

    for key, val := range vector {
        fmt.Println(key, val)

    Structs don't support iteration (unless you use reflection).

    Struct fields can have tags (additional attributes):

    type User struct {
        Name          string    `json:"name"`
        Password      string    `json:"password"`

    Maps don't have this feature.