在Go中如何使用堆包?

时间:2019-11-27 21:51:31

标签: go package heap priority-queue

我一直在尝试在Go中使用Heap包,但不确定如何初始化它。

package main
import "container/heap"

type PriorityMessage struct {
    Priority int
    Message string
}

func priorityQueue() {
    //WOULD THIS not initialize the heap?
    h := heap.Init(h PriorityMessage)

}

我一直在尝试在线查找有关其他人如何初始化其堆的示例,并且所有人似乎每次都创建自己的Go堆程序包版本。从堆包中调用heap.Init(h Interface)函数会不起作用吗?

2 个答案:

答案 0 :(得分:2)

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;

public class Test {
  public static void main(String[] args) throws ScriptException {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String test = "2+2";
    System.out.println(engine.eval(test));
    } 
}```

答案 1 :(得分:0)

有堆。首先应该实现接口。

type Interface interface {
    sort.Interface
    Push(x interface{}) // add x as element Len()
    Pop() interface{}   // remove and return element Len() - 1.
}

这意味着您应该为PriorityMessage结构提供必要的方法。将结构实例传递到堆之后。Init(&pm)。

您可以在godoc中找到评论链接中的详细信息。

只是为了澄清混乱。 Go是一种缺少泛型的强类型语言。因此,堆包的设计方式与类型无关。您可以为要实现的所有类型创建自己的实现。任何类型都可以实现堆。堆包可以使用接口。