Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop golang-树结构抽象_Oop_Go - Fatal编程技术网

Oop golang-树结构抽象

Oop golang-树结构抽象,oop,go,Oop,Go,我试图编写一个树结构,其中每个节点都应该有一个id和父ref/id参数 通过扩展节点结构,您应该能够添加一些自定义参数(如标题、图标、颜色…)。它应该是内联的,并在以后插入mgo 您可以在下面或此处找到代码: 我试图避免向nodeExtension结构添加方法,并通过node结构共享它。但是,CreateNode方法只获取节点数据,而不获取包装结构 如何在不丢失自定义参数的情况下实现该算法(本例中的描述)有何想法 谢谢 package main import ( "fmt" ) ty

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

通过扩展节点结构,您应该能够添加一些自定义参数(如标题、图标、颜色…)。它应该是内联的,并在以后插入mgo

您可以在下面或此处找到代码:

我试图避免向nodeExtension结构添加方法,并通过node结构共享它。但是,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 :/
您的
CreateNode()
函数在一种类型的
节点上运行,该节点没有
说明
字段。 将签名更改为:

func(t*nodeExtension)CreateNode()
将按您希望的方式在此场景中操作:它将打印出整个
nodeExtension
struct:

我不完全确定您想在这里实现什么,但是可能有一个
node
类型的接口,它实现了
String()
方法,然后像
simpleNode
extendedNode
这样的接口,您可以看看吗