zoukankan      html  css  js  c++  java
  • compare.go


    package clientv3

    import (
        pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
    )

    type CompareTarget int
    type CompareResult int

    const (
        CompareVersion CompareTarget = iota
        CompareCreated
        CompareModified
        CompareValue
    )

    type Cmp pb.Compare

    func Compare(cmp Cmp, result string, v interface{}) Cmp {
        var r pb.Compare_CompareResult

        switch result {
        case "=":
            r = pb.Compare_EQUAL
        case "!=":
            r = pb.Compare_NOT_EQUAL
        case ">":
            r = pb.Compare_GREATER
        case "<":
            r = pb.Compare_LESS
        default:
            panic("Unknown result op")
        }

        cmp.Result = r
        switch cmp.Target {
        case pb.Compare_VALUE:
            val, ok := v.(string)
            if !ok {
                panic("bad compare value")
            }
            cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)}
        case pb.Compare_VERSION:
            cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)}
        case pb.Compare_CREATE:
            cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)}
        case pb.Compare_MOD:
            cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)}
        default:
            panic("Unknown compare type")
        }
        return cmp
    }

    func Value(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VALUE}
    }

    func Version(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_VERSION}
    }

    func CreateRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_CREATE}
    }

    func ModRevision(key string) Cmp {
        return Cmp{Key: []byte(key), Target: pb.Compare_MOD}
    }

    func mustInt64(val interface{}) int64 {
        if v, ok := val.(int64); ok {
            return v
        }
        if v, ok := val.(int); ok {
            return int64(v)
        }
        panic("bad value")
    }

  • 相关阅读:
    Laravel 项目中编写第一个 Vue 组件
    laravel 中CSS 预编译语言 Sass 快速入门教程
    Laravel 项目中使用 Bootstrap 框架
    web框架之MVC/MTV
    jQuery补充之jQuery扩展/form表单提交/滚动菜单
    jQuery前端插件以及图片延迟加载
    JavaScript正则表达式补充
    jQuery语法介绍
    DOM
    JavaScript
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7452671.html
Copyright © 2011-2022 走看看