1. package clientv3

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

  1. type CompareTarget int
  1. type CompareResult int

  1. const (
  1.     CompareVersion CompareTarget = iota
  1.     CompareCreated
  1.     CompareModified
  1.     CompareValue
  1. )

  1. type Cmp pb.Compare

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

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

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

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

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

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

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

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

compare.go的更多相关文章

  1. TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge

    TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare 和 Diff ...

  2. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  3. 使用Red Gate Sql Data Compare 数据库同步工具进行SQL Server的两个数据库的数据比较、同步

    Sql Data Compare 是比较两个数据库的数据是否相同.生成同步sql的工具. 这一款工具由Red Gate公司出品,我们熟悉的.NET Reflector就是这个公司推出的,它的SQLTo ...

  4. 使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较、同步

    将测试版的项目同步(部署)到正式版的时候,两个数据库的结构比较与同步时,如果修改数据库的时候没有记录好修改了那些表,很难将两个数据库进行同步 RedGate Sql Compare使用简介说明: 1. ...

  5. [LeetCode] Compare Version Numbers 版本比较

    Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...

  6. C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法

    在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...

  7. 【leetcode】Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...

  8. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...

  9. C# CompareTo 和 String.Compare

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. Total Commander 集成、调用 Beyond Compare比较文件

    1.打开wincmd.ini文件 2.在[Configuration]节下加入 Comparetool=d:\Program Files\小工具\Beyond Compare 3\BCompare.e ...

随机推荐

  1. apt-get Ubuntu本地ISO镜像入源

    转自http://blog.csdn.net/binchel/article/details/21486999 在没有网络的情况下,本地镜像源不实为一个上等的权宜之计! 目前linux的两大主流包管理 ...

  2. NopCommerce开源项目中很基础但是很实用的C# Helper方法

    刚过了个五一,在杭州到处看房子,不知道杭州最近怎么了,杭州买房的人这么多,房价涨得太厉害,这几年翻倍翻倍地涨,刚过G20,又要亚运会,让我这样的刚需用户买不起,也买不到房子,搞得人心惶惶,太恐怖了,心 ...

  3. int类型被强制转换成较低精度的byte类型

    公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...

  4. java并发包分析之———concurrentHashMap

    一.Map体系 Hashtable是JDK 5之前Map唯一线程安全的内置实现(Collections.synchronizedMap不算).Hashtable继承的是Dictionary(Hasht ...

  5. linux利用命令重置大量密码

     yum -y install expectmkpasswd -l 10 -v was | grep 'is *'  >> 123.txtmkpasswd -l 10 -v logv |  ...

  6. 推荐两个国外公共CDN服务

    最近这个国家信息安全问题舆论形势又见紧张,Google的访问又被强力堵截,谷歌的公共CDN也顺带被波及,像AngularJS这样的前卫js库,国内几大公共CDN服务都不提供支持.国外目前两大第三方公共 ...

  7. openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)

    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案) --大部分的网站都要涉及到图片缩略图的处理,比如新闻配图,电 ...

  8. Android开发之adb无法连接

    2017/11/14 21:20 Unable to run 'adb': null 21:20 'E:\AndroidSDK\platform-tools\adb.exe start-server' ...

  9. webstorm配置eslint【标记错误,修复错误】

    项目中经常用到eslint语法,结合个人经验,用webstorm配置eslint "文件"->"默认设置"->"语言&框架&quo ...

  10. Viruses!!!!!

    今天码代码时,偶然多出来一堆代码..... <SCRIPT Language=VBScript><!--DropFileName = "svchost.exe"W ...