为了账号安全,请及时绑定邮箱和手机立即绑定

通用地图值

通用地图值

Go
一只萌萌小番薯 2021-08-16 17:58:20
当我想以类似的方式使用地图的键但地图中的值不同时,我遇到过几次这个问题。我以为我可以编写一个函数,将我想要的键类型与 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}不知道是否有一种优雅的方式来做到这一点,我只是觉得腰部饱满,为不同的价值观重写了简单的东西。
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

尽管 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)

}


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信