Go 地图是对内部数据的引用。这意味着当“复制”地图时,它们最终会共享相同的参考,从而编辑相同的数据。这与拥有相同项目的另一张地图有很大不同。但是,我找不到任何方法来区分这两种情况。import "fmt"import "reflect"func main() { a := map[string]string{"a": "a", "b": "b"} // b references the same data as a b := a // thus editing b also edits a b["c"] = "c" // c is a different map, but with same items c := map[string]string{"a": "a", "b": "b", "c": "c"} reflect.DeepEqual(a, b) // true reflect.DeepEqual(a, c) // true too a == b // illegal a == c // illegal too &a == &b // false &a == &c // false too *a == *b // illegal *a == *c // illegal too}有什么解决办法吗?
1 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
使用 Reflect 包将映射作为指针进行比较:
func same(x, y interface{}) bool {
return reflect.ValueOf(x).Pointer() == reflect.ValueOf(y).Pointer()
}
在问题中的地图上像这样使用它:
fmt.Println(same(a, b)) // prints true
fmt.Println(same(a, c)) // prints false
- 1 回答
- 0 关注
- 82 浏览
添加回答
举报
0/150
提交
取消