获取值形式嵌套地图类型map [string] interface {}

I'm trying to get all value from nested map and, I don't know how I can do that.

package main

import "fmt"

func main() {
    m := map[string]interface{}{
        "date":       "created",
        "clientName": "data.user.name",
        "address": map[string]interface{}{
            "street": "x.address",
        },
        "other": map[string]interface{}{
            "google": map[string]interface{}{
                "value": map[string]interface{}{
                    "x": "y.address",
                },
            },
        },
        "new_address": map[string]interface{}{
            "address": "z.address",
        },
    }

    for i := range m {
        fmt.Println(m[i])
        // how I can get value from other nested map?
    }
}

how I can get value from other nested map?

Inspired by @BayRinat answer

package main

import "fmt"

func main() {
    m := map[string]interface{}{
        "date":       "created",
        "clientName": "data.user.name",
        "address": map[string]interface{}{
            "street": "x.address",
        },
        "other": map[string]interface{}{
            "google": map[string]interface{}{
                "value": map[string]interface{}{
                    "x": "g.address",
                },
            },
        },
        "new_address": map[string]interface{}{
            "address": "z.address",
        },
        "key1": map[string]interface{}{
            "key2": map[string]interface{}{
                "key3": map[string]interface{}{
                    "key4": map[string]interface{}{
                        "key5": map[string]interface{}{
                            "key6": map[string]interface{}{
                                "key7": map[string]interface{}{
                                    "key": "enough",
                                },
                            },
                        },
                    },
                },
            },
        },
    }

    for i := range m {
        nestedMap, ok := m[i].(map[string]interface{})
        if ok {
            fmt.Println("Key:", i)
            fmt.Println("Value:", getValNestedMap(nestedMap))
        } else {
            fmt.Println("Key:", i)
            fmt.Println("Value:", m[i])
        }
    }

}

func getValNestedMap(m map[string]interface{}) interface{} {
    for i := range m {
        nestedMap, ok := m[i].(map[string]interface{})
        if ok {
            return getValNestedMap(nestedMap)
        }
        return m[i]
    }

    return nil
}

Go Playground

You should use nonpanic casting to target value.

for i := range m {
    nestedMap, ok := m[i].(map[string]interface{})
    if ok {
        // Do what you want
    }
}

More details: https://golang.org/ref/spec#Type_assertions