Go 在编写优先级队列时,如何向用户隐藏堆方法?

Go 在编写优先级队列时,如何向用户隐藏堆方法?,go,Go,我下面将实现一个优先级队列。我不喜欢的是,当在main方法中使用它时,用户必须调用heap.Push和heap.Pop。让优先级队列包含一个堆,而不是将其包装在堆中,对我来说更有意义。我认为这是错误的,还是示例代码显示了在Golang中执行此操作的正确方法?我创建了一个包装器类,该类调用heap.Push和heap.Pop package huffman import "container/heap" type RunePriorityQueue struct { queue Pri

我下面将实现一个优先级队列。我不喜欢的是,当在main方法中使用它时,用户必须调用heap.Push和heap.Pop。让优先级队列包含一个堆,而不是将其包装在堆中,对我来说更有意义。我认为这是错误的,还是示例代码显示了在Golang中执行此操作的正确方法?

我创建了一个包装器类,该类调用heap.Push和heap.Pop

package huffman

import "container/heap"

type RunePriorityQueue struct {
    queue PriorityQueue
}

func (RunePriorityQueue) NewRunePriorityQueue() *RunePriorityQueue {
    newRPQ := new(RunePriorityQueue)
    heap.Init(&newRPQ.queue)
    return newRPQ
}

func (rpq *RunePriorityQueue) Push(item *Item) {
    heap.Push(&rpq.queue, item)
}

func (rpq *RunePriorityQueue) Pop() *Item {
    return heap.Pop(&rpq.queue).(*Item)
}

我不确定我是否完全理解您的问题,但是如果您想要实现优先级队列并控制API,您应该创建自己的类型,并向外部世界公开您想要的任何内容。在内部,您可以使用
PriorityQueue
,如果这符合您的要求。你能发布一些代码来说明你想实现什么吗?
heap.Interface
docs:<此接口中的code>Push和
Pop
用于调用package
heap
的实现。要从堆中添加和删除内容,请使用
heap.Push
heap.Pop
。如果你仔细想想,这是有道理的。如果您不想利用package
heap
的优点,那么自己实现优先级队列没有什么错。据我所知,由于其基于树的功能,它只能提供高效的插入/查找。例如,它基本上采用了您的简单的
Push
方法,并将其插入到必要的位置,因此您不需要执行相同的操作。我创建了另一种类型RunePriorityQueue,它是一个结构,它的唯一成员是PriorityQueue。它还有Push和Pop,只在memper PriorityQueue上调用heap.Push和heap.Pop。当然,您可以自由地使用自己的方法包装功能。您可能有一个私有的
priorityQueue
来处理
priorityQueue
作为面向用户的实现,使用适当的
Push
Pop
方法分别调用
heap.Push
heap.Pop
。谢谢大家的帮助。