我想复制一个数据结构实例。由于Go语言没有内置函数,我正在使用第三方库:https://github.com/emirpasic/gods
。
例如,我可能会尝试使用哈希集合进行深拷贝。
var c, d hashset.Set
c = *hashset.New()
c.Add(1)
deepcopy.Copy(d, c)
c.Add(2)
fmt.Println(c.Contains(2))
fmt.Println(d.Contains(2))
fmt.Println(c.Contains(1))
fmt.Println(d.Contains(1))
然而,哈希集合的内容根本没有被复制。我知道深复制模块无法复制未导出的值,但由于库中没有内置的“复制构造函数”,这是否意味着在不修改其代码的情况下无法使用该库完全复制数据结构实例?(我研究过的一些其他库也存在类似的问题。)我是 Go 语言的新手,感觉不太对劲,因为类似的事情在 C++ 中可以很容易地实现。我知道我可以编写自己的版本或修改它们的代码,但这比预期的工作量还要大,这就是我认为应该有一个惯用的方法的原因。
注:对于那些可能会说“没有这样的功能”的人,我正在将一些复杂的状态与一些数据结构分发到并行计算线程中,他们直接使用状态,并且不能相互干扰。
reflect
包,您应该能够使用unsafe
实现自己的深度复制,包括未导出的字段,如果我没有弄错的话。 - mkoprivaunsafe
) - mkopriva