func (lq *ListenerQueue) Sort() *ListenerQueue {
	ls := ByPriorityItems(lq.items)
	if !sort.IsSorted(ls) {
		sort.Sort(ls)
	}
	return lq
}
Sort the queue items by ListenerItem's priority.
Priority:
High > Low
package event
import (
	"fmt"
	"sort"
)
type Listener interface {
	Handle(e Event) error
}
type ListenerFunc func(e Event) error
func (fn ListenerFunc) Handle(e Event) error {
	return fn(e)
}
type Subscriber interface {
	SubscribedEvents() map[string]interface{}
}
type ListenerItem struct {
	Priority int
	Listener Listener
}
type ListenerQueue struct {
	items []*ListenerItem
}
func (lq *ListenerQueue) Len() int {
	return len(lq.items)
}
func (lq *ListenerQueue) IsEmpty() bool {
	return len(lq.items) == 0
}
func (lq *ListenerQueue) Push(li *ListenerItem) *ListenerQueue {
	lq.items = append(lq.items, li)
	return lq
}