go - 在 GO 中使用 map 作为 map 键的替代方法

标签 go

我想用时间戳标记我的 map ,会有各种 map - 动态生成。键将被重复,所以如果出现相同的 map ,我想更新它的值

我从外部来源获取 map ,并希望在阅读时注册

我经常想迭代 map 并找到那些有一段时间没有更新的 map

a = map[string]string{"a":1, "b":2}
b = map[map[string]string]time.Time{}
b[a] = 1 

我知道它不受支持,但我想知道有哪些方法可以做到这一点?
首先想到的是:将map序列化为字符串,作为key,,?

最佳答案

制作一个结构来保留您需要的信息:

type MyMap struct {
     timestamp time.Time
     m map[string]string
}

并通过遍历这样的结构 slice 进行查找:
func lookup(needle map[string]string, haystack []MyMap) (MyMap, bool) {
    for _, myMap := range haystack {
        if reflect.DeepEqual(needle, myMap.m) {
            return myMap, true
        }
    }
    return nil, false
}

或者,将您的 map 转换为 JSON 并将结果用作键:
b, _ := json.Marshal(myMap)
key := string(b)
m, ok := myMaps[key] // myMaps is map[string]MyMap
if !ok {
    myMaps[key] = myMap
}

显然,json.Marshal在编码之前对 map 的键进行排序,所以这应该是一个可靠的解决方案。

关于go - 在 GO 中使用 map 作为 map 键的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61848322/

相关文章:

go - 如何正确处理 runtime.Caller(0) 上的错误

go - 为什么我可以将结构函数分配给其他结构的成员?

go - 在 golang 中从 stdin 读取输入

unicode - 如何从golang中的一串 rune 中获取子串?

go - 如何从另一个请求返回一个主体

go - 如何(简洁地)从 Go 中的 slice 中删除第一个元素?

戈朗 : Parse bit values from a byte

go - 在 Go 中使用闭包时如何从函数类型返回

audio - 使 go http 客户端与非标准的 http 服务器一起工作

go - 为什么这个 curl 命令不起作用?