编写一个函数以从映射中获取字符串键的切片,无论映射是什么值类型

我想编写一个函数来从映射中获取所有键作为字符串切片,其中键类型是字符串,值可以是任何其他类型。


像这样,但可以有任何类型的 map[string]... 作为输入。


func mapLowCaseKeys(v map[string]string) []string {

    keys := make([]string, len(v))

    i := 0

    for key := range v {

        keys[i] = strings.ToLower(key)

        i++

    }

    return keys

}

其实我想Object.keys()用Javascript实现。


我尝试过用作map[string]interface{}函数的参数类型,但它不能只将任何特定的映射传递给该函数,这在 golang 中可能吗?


白衣非少年
浏览 96回答 1
1回答

互换的青春

MapKeys您可以在包中使用reflect来做到这一点MapKeys 返回一个切片,其中包含映射中存在的所有键(按未指定的顺序)。如果 v 的 Kind 不是 Map,它会发生恐慌。如果 v 表示 nil 映射,则它返回一个空切片。下面给出了一个示例package mainimport (    "fmt"    "reflect")func main() {    fmt.Println(mapLowCaseKeys(map[string]float64{        "key1" : 1.2,    }))    fmt.Println(mapLowCaseKeys(map[string]interface{} {        "key1" : 1.2,        "key2" : map[string]string{"kk": "3"},    }))    fmt.Println(mapLowCaseKeys(map[int]float64{         11 : 1.2,    }))    fmt.Println(mapLowCaseKeys(nil))}func mapLowCaseKeys(v interface{}) []string {    keys := []string{}    value := reflect.ValueOf(v)    if value.Kind() == reflect.Map {        for _, v := range value.MapKeys() {            if v.Kind() == reflect.String {                keys = append(keys, v.String())            }        }        return keys    } else {        fmt.Println("it is not a map!!")        return keys    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go