私は階層ツリーとして使うためにインターフェイスで作業してきました。アイデアは、.Children()
、.Father()
と呼び、{id, FatherId}
スキーマのスライスに基づいて階層を自動入力する機能を念頭に置いています。Golang型アサーションでポインタを使用
私はこのインターフェイスの3つの異なる実装を必要とします。それぞれの構造体全体を処理する方が便利かもしれませんが、Goを初めて使っていて、インターフェイスを理解するためにこの例を使用することに決めました。
私は次のようになりますインターフェイスに来ている:プレーンノードは、彼のIDを定義する項目になり
func Populate(plainNodes []Node, HierarchichalNodes *[]Node) {}
:だからアイデアはPopulate
関数を呼び出している
type Node interface{
Equals(nodo *Node) bool
AddChild(child *Node)
SetFather(father *Node)
Children() []Node
Father() *Node
}
父:
{id: "Animal", father: ""}
{id: "Plant", father: ""}
{id: "Mammals", father: "Animal"}
階層型ノードは、結果:
Animal
|__Mammals
Plant
具体的な構造体にインターフェイスを実装しようとすると、このケースが発生します。
type Category struct{
children []Category
father Category
}
func (c Category) SetFather(node *Node) {
v, ok = node.(*Category)
c.father = v
}
Category
に私はCategory
父親と子供とではなく、インタフェースNode
で仕事をしたいということに注意してください。
私は、変換を行うことはできません、私が取得:
invalid type assertion: nodo.(*Category) (non-interface type *Node on left)
任意のアイデア?
あなたはポインタをインターフェイスとして渡しません。 '* Category'へのポインタは' Node'へのポインタではなく 'Node'です。 –