当前位置: 首页 > 面试题库 >

通用地图值

毕泽宇
2023-03-14
问题内容

想要以类似方式使用地图键,但是地图中的值不同时,我已经遇到过几次这个问题。我以为我可以编写一个函数,将我想要的键类型与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
}

不知道是否有一种优雅的方式可以做到这一点,我只是觉得腰部饱满地将简单的东西重写为不同的价值。


问题答案:

尽管地图和切片本身是通用的,但它们不是协变的(它们也不是协变的,因为接口不是通用的)。这是使用不具有泛型的语言的一部分,您将不得不重复一些事情。

如果您确实只需要获取任何旧地图的键,则可以使用反射来做到这一点:

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)
}


 类似资料:
  • 问题内容: 我有一个返回定义为的方法: 我不清楚此方法的实际实现,但是当我尝试这样做时: 我收到以下编译时错误消息: Map类型的put(String,capture#9-of?)方法不适用于参数(String,String) 问题是什么?是什么类型的吗? 提前致谢。 问题答案: 通配符的意思是“值类型参数可以是任何东西”- 并不 意味着“您可以像使用任何想要的东西一样使用它”。换句话说,a 作为

  • 写在前面:排序挂了TAT 一面: 实习项目 go的gin?go服务? 连数据库用的哪个库 MySQL的数据库的锁 锁触发条件/情况 go的GPM模型简单介绍 go的垃圾回收 进程和线程的区别 进程间通信方式 线程间通信方式 常用的Linux命令 科研项目 队列和栈的区别 图的了解 图上两点的最小距离何种算法 goroutine中有哪几种锁 手撕:快排 二面: 论文项目介绍 实习项目介绍 更新缓存数

  • 问题内容: 我尝试遍历一个映射,将其作为指向函数的指针传递,但是我找不到访问元素的方法。这是代码: 此示例中的第4行返回以下编译错误: 我尝试了方括号,但没有效果。如果我带走所有引用运算符(*&),则可以正常编译。 我该怎么写? 问题答案: 您不需要在地图上使用指针。 映射类型是引用类型,例如指针或切片 如果需要更改,可以使用一个指针:

  • 问题内容: Go中的地图是否通过值或引用传递? 始终可以将函数定义为以下形式,但这是一个过大的杀伤力吗? 相同的返回值问题。我应该返回指向地图的指针,还是将地图作为值返回? 这样做的目的当然是避免不必要的数据复制。 问题答案: 在此线程中,您将找到答案: Golang:使用地图参考来访问地图 您不需要在地图上使用指针。 映射类型是引用类型,例如指针或切片[1] 如果需要更改会话,可以使用一个指针:

  • 是否可以使用Google API为网站创建一个与此完全相同的地图: https://www.google.pl/maps/place/Googleplex/@37.422,-122.0840835,19z/data=!4m2!3m1!1s0x808fba02425dad8f: 0x6c296c66619367e0 所以我想要的是将地点ID传递给API,以获得一个像Googleplex这样的地方,我

  • 本文向大家介绍ios百度地图的使用(普通定位、反地理编码),包括了ios百度地图的使用(普通定位、反地理编码)的使用技巧和注意事项,需要的朋友参考一下 iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下: ios百度地图的使用(普通定位、反地理编码) 1.首先接受基本的地图功能 新建一个地图类,xib拖也行,我这边是代码实现的。   这样基本的地