Golang Generic-ish Hashmap

时间:2018-06-04 18:47:55

标签: generics go

我正在尝试为map []类型创建一个包装器,以便我可以添加一些像contains()这样的方法(这几乎让我想念java)。但是,我不知道如何在java中做泛型。

虽然我读过的几乎所有东西都说golang没有泛型类型,但是必须有一种比我正在使用的每种可能的结构和值组合单独的结构更好的方法。

这是我正在尝试做的事情,即使代码不起作用:

func newMap(key interface{}, val interface{}) {
    keytype := key.(type)
    valtype := val.(type)

    return hashmap{map[keytype]valtype}
}

type hashmap struct {
    hashmap     map[]
}

任何有关如何执行此操作的帮助/解释都将不胜感激。

编辑:包含不是我试图复制的唯一东西,因此希望制作“通用”散列图。 replace(),isEmpty(),以及所有有趣的东西。

2 个答案:

答案 0 :(得分:2)

Golang没有泛型,就像你说的那样。

但是可以使用您自己的类型声明地图,因此您不一定需要编写自己的"泛型" hashmap使用"包含"或"为空"。

示例(假设已存在一些Icon和Color类型,以及返回某些图标的.函数):

GetTheIcon

在此处查看更多信息:

https://blog.golang.org/go-maps-in-action

答案 1 :(得分:-1)

要创建像地图包含的函数,您不需要泛型。 Go可以很好地处理这个问题,有更多方法可以做到这一点,根据用例,某些方法可以有更好的性能。例如,您可以考虑编写哈希码函数

但还有一些事情要考虑。

在Java中,泛型只是代码糖。在运行时,Java中的映射或列表具有与Golang相同的功能。在map-action中变为可见的对象将具有属于该对象的特征。在Java和Golang中也是如此。所以在golang你没有语法糖,所以你必须记住你可以在地图,列表等中找到哪些对象。

在这里阅读Java中的语法糖。它将帮助您接受围棋设计师的选择。

https://www.cordinc.com/blog/2010/09/java-generics-are-not-real-gen.html