package zk import ( "fmt" "github.com/samuel/go-zookeeper/zk" "time" ) type ZookeeperMgr struct { Conn *zk.Conn /* flags有4种取值: 0:永久,除非手动删除 1:短暂,session断开则改节点也被删除 2:会自动在节点后面添加序号 3:即,短暂且自动添加序号 */ flags int32 //初始化时默认0 acl []zk.ACL //初始化时默认允许所有操作 } type ZkCfg struct { Servers []string } func InitZookeeper(cfg ZkCfg) *ZookeeperMgr { conn, _, err := zk.Connect(cfg.Servers, time.Second*5) if err != nil { fmt.Println("InitZookeeper失败", err.Error()) } return &ZookeeperMgr{Conn: conn, acl: zk.WorldACL(zk.PermAll)} } func (mgr *ZookeeperMgr) Create(path string, data []byte) (string, error) { return mgr.Conn.Create(path, data, mgr.flags, mgr.acl) } //删改与增不同在于其函数中的version参数,其中version是用于 CAS支持 func (mgr *ZookeeperMgr) Delete(path string) error { _, stat, err := mgr.Conn.Get(path) if err != nil { return err } return mgr.Conn.Delete(path, stat.Version) //version是用于 CAS支持 } func (mgr *ZookeeperMgr) Update(path string, data []byte) error { _, stat, err := mgr.Conn.Get(path) if err != nil { return err } _, err = mgr.Conn.Set(path, data, stat.Version) //version是用于 CAS支持 return err } func (mgr *ZookeeperMgr) Get(path string) ([]byte, *zk.Stat, error) { return mgr.Conn.Get(path) }