存取具有不同值類型的映射的鍵
在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中文網其他相關文章!