2017-07-02 20 views
0

私は、各ノードがIDと親ref/id paramsを持つべき木構造をコーディングしようとしています。ゴラン木構造抽象化

ノード構造体を拡張すると、カスタムパラメータ(title、icon、color ...など)を追加できるはずです。それはあなたがここに以下のコードかを見つけることができます...後での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

はあなたのCreateNode()機能はDescriptionフィールドを持たない、nodeのタイプで動作します。 func (t *nodeExtension) CreateNode() このシナリオでにあなたがそれをしたいどのように動作します: はに署名を変更することは、全体nodeExtension構造体をプリントアウトします: https://play.golang.org/p/nLxblNySB9

私はあなたがここで達成しようとしているものを完全にわからないんだけど、しかし、nodeタイプのインターフェイスを持ち、String()メソッドを実装し、次にsimpleNodeextendedNodeのようなインターフェイスを持つのは、あなたが見ることができるものでしょうか?

関連する問題