简单描述,就是在内存保存数据,在创建和查询过程中,某些字段的值会在查询时意外的被改变,改变的方式也很奇怪。
例如存在一个结构体 Task 和一个全局变量 list:
var list sync.Map type Task struct { ID int64 Name string User string } 创建并把 task 保存在全局变量 list 中;
task := Task { ID: now.UnixMicro(), Name: "agent-web", User: "wangds", } list.Store(task.Name, task) 执行查询时,task 的值可会意外的改变,发生概率盲猜有 0.1-0.4 ; 而且每次更改代码后,只遵循以下 5 种改变模式中的 1 种:
{ ID: 1677200690411702, Name: "agent-web", User: "agent-", } { ID: 1677200690411702, Name: "1gent-web", User: "wangds", } { ID: 1677200690411702, Name: "agent-web", User: "1angds", } { ID: 1677200690411702, Name: "agent-web", User: "167720", } { ID: 1677200690411702, Name: "167720069", User: "wangds", } 全局变量试过其他类型,比如 map 、slice ,还试过一个第三方的内存缓存工具 ristretto ,都有这个问题。
