Golang结构体指针调用接口方法
Golang struct pointer invokes interface method
我正在学习 Golang,我在遍历链表时遇到了问题。我打算做的是访问链表的所有节点,并从每个节点调用一个接口方法。
我定义了一个接口
type Sortable interface {
CompareTo(t Sortable) int
}
我已经定义了一个节点类型和一个链表
type node struct {
pNext *node
value int
}
type LinkedList struct {
PHead, PNode *node
}
func (n node) CompreTo(t Sortable) int{
other := t.(node)
if n.value == other.value {
return 0
} else if n.value > other.value {
return 1
} else {
return -1
}
}
在遍历链表进行比较时出现问题:
......
PNode.CompareTo(PNode.pNext)
我得到:
恐慌:接口转换:Sortable 是 *node,不是 node
猜猜这是因为 PNode 和 PNode.pNext 是指向节点结构的指针,而不是节点对象?那我应该怎么投指针才对呢?
我以前用 C++ 编写,所以也许我的策略在 Golang 世界中出错了?
如有任何建议,我们将不胜感激!
您必须将 Sortable t
断言到指针节点。
func (n node) CompreTo(t Sortable) int{
other := t.(*node)
if n.value == other.value {
return 0
} else if n.value > other.value {
return 1
} else {
return -1
}
}
我正在学习 Golang,我在遍历链表时遇到了问题。我打算做的是访问链表的所有节点,并从每个节点调用一个接口方法。
我定义了一个接口
type Sortable interface {
CompareTo(t Sortable) int
}
我已经定义了一个节点类型和一个链表
type node struct {
pNext *node
value int
}
type LinkedList struct {
PHead, PNode *node
}
func (n node) CompreTo(t Sortable) int{
other := t.(node)
if n.value == other.value {
return 0
} else if n.value > other.value {
return 1
} else {
return -1
}
}
在遍历链表进行比较时出现问题: ......
PNode.CompareTo(PNode.pNext)
我得到: 恐慌:接口转换:Sortable 是 *node,不是 node
猜猜这是因为 PNode 和 PNode.pNext 是指向节点结构的指针,而不是节点对象?那我应该怎么投指针才对呢? 我以前用 C++ 编写,所以也许我的策略在 Golang 世界中出错了?
如有任何建议,我们将不胜感激!
您必须将 Sortable t
断言到指针节点。
func (n node) CompreTo(t Sortable) int{
other := t.(*node)
if n.value == other.value {
return 0
} else if n.value > other.value {
return 1
} else {
return -1
}
}