func (h *HashTable) Get(key []byte) (bool, []interface{}) {
	bucket := hash64a(key)
	index, ok := h.hashMap[bucket]
	if !ok {
		return false, nil
	}
	return h.hashEntry[index].get(key)
}
Get gets the values of the "key".
package common
import (
	"bytes"
	"hash/fnv"
)
func hash64a(data []byte) uint64 {
	h := fnv.New64a()
	h.Write(data)
	return h.Sum64()
}
type entry struct {
	key []byte
	value []interface{}
	next *entry
}
func (e *entry) put(key []byte, value interface{}) *entry {
	if e == nil {
		return &entry{key, []interface{}{value}, nil}
	}
	if bytes.Equal(e.key, key) {
		e.value = append(e.value, value)
		return e
	}
	e.next = e.next.put(key, value)
	return e
}
func (e *entry) get(key []byte) (bool, []interface{}) {
	if e == nil {
		return false, nil
	} else if bytes.Equal(e.key, key) {
		return true, e.value
	} else {
		return e.next.get(key)
	}
}
type HashTable struct {
	hashEntry []*entry
	hashMap map[uint64]int
	size int
}
func NewHashTable() *HashTable {
	return &HashTable{
		hashMap: make(map[uint64]int),
		size:    0,
	}
}
func (h *HashTable) Size() int {
	return h.size
}
func (h *HashTable) Put(key []byte, value interface{}) {
	var table *entry
	bucket := hash64a(key)
	index, ok := h.hashMap[bucket]
	if !ok {
		table = &entry{key, []interface{}{value}, nil}
		h.hashMap[bucket] = len(h.hashEntry)
		h.hashEntry = append(h.hashEntry, table)
	} else {
		h.hashEntry[index] = h.hashEntry[index].put(key, value)
	}
	h.size++
}