golang - 树结构抽象

时间:2017-07-02 12:37:52

标签: oop go

我试图编写一个树结构,其中每个节点应该有一个id和父ref / id参数。

通过扩展节点结构,您应该能够添加一些自定义参数(如标题,图标,颜色......)。它应该内嵌并随后插入mgo ...

您可以在下方或此处找到代码:https://play.golang.org/p/bbvs2iM3ri

我试图避免向nodeExtension结构添加方法并通过节点结构共享它。但是,CreateNode方法只获取节点数据,而不是包装结构。

如何在不丢失自定义参数的情况下实现此算法的任何想法(在本例中为描述)?

感谢

package main

import (
    "fmt"
)

type item struct {
    ID string
}

type node struct {
    item   `bson:,inline`
    Parent string
}

func (t *node) CreateNode() {
    fmt.Printf("Node: %+v\n", t)
}

type nodeExtension struct {
    node        `bson:,inline`
    Description string
}

func main() {
    i := &nodeExtension{
        node: node{
            item: item{
                ID: "1",
            },
            Parent: "",
        },
        Description: "Root node",
    }
    i.CreateNode()

    i = &nodeExtension{
        node: node{
            item: item{
                ID: "2",
            },
            Parent: "1",
        },
        Description: "Another node",
    }
    i.CreateNode()
}


// output:
// Node: &{item:{ID:1} Parent:}
// Node: &{item:{ID:2} Parent:1}

// both without description :/

1 个答案:

答案 0 :(得分:1)

您的CreateNode()函数使用node类型,但没有Description字段。 将签名更改为: func (t *nodeExtension) CreateNode() 将在这种情况下运行您想要的方式:它将打印出整个nodeExtension结构: https://play.golang.org/p/nLxblNySB9

我不完全确定你在这里尝试完成的任务,但可能有一个node类型的接口,它实现了String()方法,然后就像{ {1}}和simpleNode会是您可以看到的内容吗?