Как сравнить строку значения map [string] interface {} или нет - PullRequest
3 голосов
/ 03 мая 2019

Как сравнивать строку значения map [string] interface {} или нет

m3 := map[string]interface{}{
"something":1,
"brawba":"Bawrbawr",
}

for key, value := range m3{
    if(reflect.TypeOf(value) == string or not){
        ... // here
    }else{
        ...
    }
}

https://play.golang.org/p/KjxMaGsMTOR

1 Ответ

4 голосов
/ 03 мая 2019

Используйте утверждение типа , чтобы определить, является ли значение string:

for key, value := range m3 {
    if s, ok := value.(string); ok {
        fmt.Printf("%s is the string %q\n", key, s)
    } else {
        fmt.Printf("%s is not a string\n", key)
    }
}

Используйте отражение, чтобы определить, является ли строка базового типа значения:

type mystring string

m3 := map[string]interface{}{
    "something": 1,
    "brawba":    "Bawrbawr",
    "foo":       mystring("bar"),
}

for key, value := range m3 {
    if reflect.ValueOf(value).Kind() == reflect.String {
        fmt.Printf("%s is a string with type %T and value %q\n", key, value, value)
    } else {
        fmt.Printf("%s is not a string\n", key)
    }
}
...