В способе реализации этой конкретной очереди приоритетов вы должны вызывать heap.Init
после того, как вы поместили свои элементы в очередь, как показано в оригинальном примере.
pq := make(PriorityQueue, 0)
pq.Push(&Item{value: "0", priority: 0, index: 0})
item := &Item{value: "1", priority: 10, index: 1}
pq.Push(item)
item = &Item{value: "2", priority: 20, index: 2}
pq.Push(item)
item = &Item{value: "3", priority: 5, index: 3}
pq.Push(item)
heap.Init(&pq)
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
fmt.Println(heap.Pop(&pq).(*Item))
Печатает элементы в порядке приоритета, как и ожидалось.