登录
首页 >  Golang >  Go问答

通用地图值

来源:Golang技术栈

时间:2023-03-08 09:59:13 376浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《通用地图值》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

当我想以类似的方式使用地图的键但地图中的值不同时,我遇到过几次这个问题。我想我可以编写一个函数,将我想要的键类型与 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 中的 map 和 slice 本身是泛型的,但它们不是协变的(它们也不可能是协变的,因为接口不是泛型的)。这是使用没有泛型的语言的一部分,您将不得不重复一些事情。

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

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

今天关于《通用地图值》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表