访问具有不同值类型的映射的键
在 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中文网其他相关文章!