Указатель структуры 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)
и я получаю: panic: преобразование интерфейса: сортируемый это * узел, а не узел
Думаю, это потому, что PNode и PNode.pNext являются указателями на структуру узла, а не объектами узла? Тогда как я должен привести указатель, чтобы сделать это правильно? Раньше я писал на C++, так что, может быть, моя стратегия не работает в мире Голанга?
Любой совет приветствуется!
1 ответ
Решение
Вы должны отстаивать 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
}
}