我正在尝试为 map
类型制作一个包装器,以便我可以添加一些方法,例如 contains()
(这几乎让我想念 Java) .但是,我不知道我是否可以在 Java 中做类似泛型的事情。
虽然我读过的几乎所有内容都说 Go 没有泛型类型,但肯定有比为我正在使用的每个可能的结构和值组合编写一个单独的结构更好的方法。
这是我正在尝试做的,即使代码不起作用:
func newMap(key interface{}, val interface{}) {
keytype := key.(type)
valtype := val.(type)
return hashmap{map[keytype]valtype}
}
type hashmap struct {
hashmap map[]
}
任何有关如何执行此操作的帮助/解释将不胜感激。
编辑:Contains
不是我要复制的唯一东西,因此我希望制作一个“通用” HashMap 。 replace()
、isEmpty()
,还有所有这些有趣的东西。
最佳答案
正如您所说,Golang 没有泛型。
但是映射可以使用您自己的类型来声明,因此您不一定需要编写自己的“通用”散列映射来使用诸如“包含”或“为空”之类的东西。
示例(假设一些 Icon 和 Color 类型已经存在,以及返回一些图标的 GetTheIcon
函数):
// this one will map Icon -> Colour
iconToColours := make(map[Icon]Colour)
myIcon := GetTheIcon()
// second return argument is true if the key was found in the map
_, iconIsContained := iconToColours[myIcon]
// check if the map is empty
isEmpty := (len(iconToColours) == 0)
在这里查看更多:
关于generics - Go 中的通用 hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50686965/