func NewClient(cli *clientv3.Client, root string) *Client {
	return &Client{
		client:   cli,
		rootPath: root,
	}
}
NewClient returns a wrapped etcd client
package etcd
import (
	"context"
	"crypto/tls"
	"fmt"
	"path"
	"strings"
	"time"
	"github.com/pingcap/errors"
	"go.etcd.io/etcd/clientv3"
)
type Node struct {
	Value  []byte
	Childs map[string]*Node
}
type OpType string
var (
	CreateOp OpType = "create"
	UpdateOp OpType = "update"
	DeleteOp OpType = "delete"
)
type Operation struct {
	Tp         OpType
	Key        string
	Value      string
	TTL        int64
	WithPrefix bool
	Opts []clientv3.OpOption
}
func (o *Operation) String() string {
	return fmt.Sprintf("{Tp: %s, Key: %s, Value: %s, TTL: %d, WithPrefix: %v, Opts: %v}", o.Tp, o.Key, o.Value, o.TTL, o.WithPrefix, o.Opts)
}
type Client struct {
	client   *clientv3.Client
	rootPath string
}