首頁 >後端開發 >Golang >如何從具有不同值類型的 Go Map 存取鍵?

如何從具有不同值類型的 Go Map 存取鍵?

Patricia Arquette
Patricia Arquette原創
2024-12-20 01:42:091009瀏覽

How Can I Access Keys from Go Maps with Different Value Types?

存取具有不同值類型的映射的鍵

在Go 中,映射本質上是通用的,但由於不存在,它們的行為不是協變的的泛型類型。這意味著您可能會遇到希望存取具有不同值類型的映射鍵的情況。嘗試使用 interface{} 作為值類型可能看起來很直觀,但它並沒有按預期工作。

func main() {
    mapOne := map[string]int
    mapTwo := map[string]double
    mapThree := map[string]SomeStruct

    useKeys(mapOne)
}
func useKeys(m map[string]interface{}) {
    //something with keys here
}

雖然渴望一個優雅的解決方案是可以理解的,但有必要承認在 Go 中這一點,您可能需要為具有不同值類型的映射複製某些邏輯。

但是,如果您需要靈活地從任何映射獲取鍵,則可以使用反射使用:

func useKeys(m interface{}) {
    v := reflect.ValueOf(m)
    if v.Kind() != reflect.Map {
        fmt.Println("not a map!")
        return
    }

    keys := v.MapKeys()
    fmt.Println(keys)
}

這種方法允許您使用任何類型的地圖,並提供對其密鑰的存取。

以上是如何從具有不同值類型的 Go Map 存取鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn