Указатель структуры 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
    }
}
Другие вопросы по тегам