【发布时间】:2017-02-13 20:39:15
【问题描述】:
我一直在研究一个用作分层树的界面。这个想法是大声说出具体的实现来调用.Children()、.Father() 和一个基于{id, FatherId} 架构切片自动填充层次结构的函数。
我只需要这个接口的三个不同实现,也许为每个结构做整个事情会更方便,但我是 Go 新手,决定用这个例子来理解接口。
我来到了一个看起来像这样的界面:
type Node interface{
Equals(nodo *Node) bool
AddChild(child *Node)
SetFather(father *Node)
Children() []Node
Father() *Node
}
所以想法是调用Populate 函数:
func Populate(plainNodes []Node, HierarchichalNodes *[]Node) {}
普通节点是定义他父亲 id 的项目:
{id: "Animal", father: ""}
{id: "Plant", father: ""}
{id: "Mammals", father: "Animal"}
分层节点将是结果:
Animal
|__Mammals
Plant
我遇到的问题是当我尝试在具体结构中实现接口时,本例为"Category"。
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的指针。
标签: pointers go struct types interface