尽管地图和切片本身是通用的,但它们不是协变的(它们也不是协变的,因为接口不是通用的)。这是使用不具有泛型的语言的一部分,您将不得不重复一些事情。
如果您确实只需要获取任何旧地图的键,则可以使用反射来做到这一点:
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)}


