How do you perform a deep copy of a struct in Go?

南笙酒味 提交于 2019-12-05 01:17:53
Adam Soffer

I was close. I should have assigned the copiedTree to the parent property.

func (tree *Tree) CopyTree() *Tree {
    if (tree == nil) {
        return nil
    } else {
        copiedTree := &Tree {
            tree.Left.CopyTree(),
            tree.Mid.CopyTree(),
            tree.Right.CopyTree(),
            tree.Value,
            nil,
            tree.Orientation,
            tree.IsTerminal,
            tree.Type,
        }

        if copiedTree.Left != nil {
            copiedTree.Left.Parent = copiedTree
        }
        if copiedTree.Right != nil {
            copiedTree.Right.Parent = copiedTree
        }
        if copiedTree.Mid != nil {
            copiedTree.Mid.Parent = copiedTree
        }
        return copiedTree
    }
}

How about json.Marshal and json.Unmarshal. If performance is critical, I perfer to use protobuf.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!