generics - Go 中的通用 hashmap

标签 generics go

我正在尝试为 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)

在这里查看更多:

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

关于generics - Go 中的通用 hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50686965/

相关文章:

c# - 从ViewModel调用通用方法

objective-c - 是否可以创建一个通用的 JSON 解析器?

java - 通过 Java 反射重新创建(通用)成员并填充/分配字段成员

generics - 为什么需要实现 Add 来添加两个具有特征 Num 的变量?

go - 为什么 Google 的 OAuth2 文档建议将配置文件 ID 存储在 cookie 中?

go - 构建用 go 编写的链代码时出错

c# - 类级别的结构和字符串通用约束

mysql - 将 Sql 数据导出到 .csv 并根据查询为每个表生成单独的 .csv 文件

go - 如何减少 golang 中重复的 http 处理程序代码?

go - 在golang的If-else block 中为变量分配不同的结构