func (t *GoTree) Put(owner string, data interface{}) {
	t.rwm.Lock()
	defer t.rwm.Unlock()
	t.tree.Add(owner, data, nil)
}
Put will put data to Tree. If the owner node already has some existing data
they will be overwritten by the new data.
package dns
import (
	"strings"
	"sync"
)
type GoTree struct {
	tree *Tree
	rwm  sync.RWMutex
}
func NewGoTree() *GoTree {
	return &GoTree{tree: NewTree()}
}
func (t *GoTree) Add(owner string, data interface{}, updater func(interface{}) interface{}) {
	t.rwm.Lock()
	defer t.rwm.Unlock()
	t.tree.Add(owner, data, updater)
}
func (t *GoTree) Delete(owner string) {
	t.rwm.Lock()
	defer t.rwm.Unlock()
	t.tree.Put(owner, nil)
}
func (t *GoTree) Enum(root string, handler func(path []string, data interface{}) bool) {
	t.rwm.RLock()
	defer t.rwm.RUnlock()
	t.tree.Enum(root, handler)
}
func (t *GoTree) Get(owner string) interface{} {
	t.rwm.RLock()
	defer t.rwm.RUnlock()
	return t.tree.Get(owner)
}
func (t *GoTree) Match(owner string) interface{} {
	t.rwm.RLock()
	defer t.rwm.RUnlock()
	return t.tree.Match(owner)
}