This is an automated email from the ASF dual-hosted git repository.

wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus-website.git


The following commit(s) were added to refs/heads/master by this push:
     new bd9077d2 Add go-client zh doc (#114)
bd9077d2 is described below

commit bd9077d2093b263f57165eb04d1263b9bd6111d0
Author: lengyuexuexuan <[email protected]>
AuthorDate: Tue May 27 14:31:03 2025 +0800

    Add go-client zh doc (#114)
---
 _data/docs_menu.yml           |   2 +-
 _docs/en/clients/go-client.md |   5 +
 _docs/zh/clients/go-client.md | 500 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 506 insertions(+), 1 deletion(-)

diff --git a/_data/docs_menu.yml b/_data/docs_menu.yml
index df4b4efa..157f15dd 100644
--- a/_data/docs_menu.yml
+++ b/_data/docs_menu.yml
@@ -15,7 +15,7 @@
     - name: title_cpp-client
       link: /clients/cpp-client
     - name: title_go-client
-      link: https://github.com/apache/incubator-pegasus/tree/master/go-client
+      link: /clients/go-client
     - name: title_python-client
       link: /clients/python-client
     - name: title_node-client
diff --git a/_docs/en/clients/go-client.md b/_docs/en/clients/go-client.md
new file mode 100644
index 00000000..d8cf9c36
--- /dev/null
+++ b/_docs/en/clients/go-client.md
@@ -0,0 +1,5 @@
+---
+permalink: clients/go-client
+---
+
+TRANSLATING
\ No newline at end of file
diff --git a/_docs/zh/clients/go-client.md b/_docs/zh/clients/go-client.md
new file mode 100644
index 00000000..9efaa906
--- /dev/null
+++ b/_docs/zh/clients/go-client.md
@@ -0,0 +1,500 @@
+---
+permalink: clients/go-client
+---
+
+# 获取go客户端
+
+下载:
+
+```bash
+go get github.com/apache/incubator-pegasus/go-client@<CommitId>
+# 例如
+go get github.com/apache/incubator-pegasus/go-client@df0eb5a
+```
+
+注:
+  * thrift 0.13
+  * Go1.18+
+
+# 客户端配置
+创建go client实例需要配置相关参数,目前仅支持参数传递方式。  
+go client的配置参数非常简单,仅需要指定meta servers。  
+用户如果需要文件配置,需自行将参数从文件从解析,再传入go client。
+```go
+// 参数配置
+    cfg := &pegasus.Config{
+        MetaServers: []string{"0.0.0.0:34601", "0.0.0.0:34601"},
+    }
+    c := pegasus.NewClient(*cfg)
+
+// 文件配置
+    cfgPath, _ := filepath.Abs("./example/pegasus-client-config.json")
+       rawCfg, err := ioutil.ReadFile(cfgPath)
+       if err != nil {
+               fmt.Println(err)
+               return
+       }
+    cfg := &pegasus.Config{}
+       json.Unmarshal(rawCfg, cfg)
+       c := pegasus.NewClient(*cfg)
+```
+# 接口定义
+## 创建Client实例
+```go
+// NewClient creates a new instance of pegasus client.
+// It panics if the configured addresses are illegal
+func NewClient(cfg Config) Client
+
+// Config is the configuration of pegasus client.
+type Config struct {
+       MetaServers []string `json:"meta_servers"`
+}
+```
+
+使用完毕后,记得close client以释放资源,譬如:
+
+```go
+c := pegasus.NewClient(*cfg)
+... 
+...
+c.Close();
+```
+
+## 创建TableConnector实例
+go client 操作数据的接口都在TableConnector中定义。  
+一个client可以有多个TableConnector实例,每一个TableConnector对应一张表。
+
+```go
+    // Open the specific pegasus table. If the table was opened before,
+       // it will reuse the previous connection to the table.
+       OpenTable(ctx context.Context, tableName string) (TableConnector, error)
+```
+## TableConnector接口
+### get  
+读单行数据。
+```go
+       // Get retrieves the entry for `hashKey` + `sortKey`.
+       // Returns nil if no entry matches.
+       // `hashKey` : CAN'T be nil or empty.
+       // `sortKey` : CAN'T be nil but CAN be empty.
+       Get(ctx context.Context, hashKey []byte, sortKey []byte) ([]byte, error)
+```
+注:   
+* 参数:需传入context、hashKey、sortKey。  
+* 返回值:value、error. 如果返回(nil,nil),表示key对应的数据不存在。  
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型(key对应数据不存在返回nil)。
+
+### Set | SetTTL
+写单行数据, SetTTL可以设置单条kv的TTL。
+```go
+    // Set the entry for `hashKey` + `sortKey` to `value`.
+       // If Set is called or `ttl` == 0, no data expiration is specified.
+       // `hashKey` : CAN'T be nil or empty.
+       // `sortKey` / `value` : CAN'T be nil but CAN be empty.
+       Set(ctx context.Context, hashKey []byte, sortKey []byte, value []byte) 
error
+       SetTTL(ctx context.Context, hashKey []byte, sortKey []byte, value 
[]byte, ttl time.Duration) error
+```
+注:  
+* 提供了两个版本的接口,其中第二个接口可以指定TTL时间。
+* 参数:需传入context、hashKey、sortKey、value, ttl单位为秒(s)  
+* 返回值:error
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型。
+
+### Del
+删除单行数据
+```go
+    // Delete the entry for `hashKey` + `sortKey`.
+       // `hashKey` : CAN'T be nil or empty.
+       // `sortKey` : CAN'T be nil but CAN be empty.
+       Del(ctx context.Context, hashKey []byte, sortKey []byte) error
+```
+注:  
+* 参数:需传入context、hashKey、sortKey。  
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型。
+
+### MultiGet | MultiGetOpt
+读**同一HashKey下**的多行数据。
+```go
+    // MultiGet/MultiGetOpt retrieves the multiple entries for `hashKey` + 
`sortKeys[i]` atomically in one operation.
+       // MultiGet is identical to MultiGetOpt except that the former uses 
DefaultMultiGetOptions as `options`.
+       //
+       // If `sortKeys` are given empty or nil, all entries under `hashKey` 
will be retrieved.
+       // `hashKey` : CAN'T be nil or empty.
+       // `sortKeys[i]` : CAN'T be nil but CAN be empty.
+       //
+       // The returned key-value pairs are sorted by sort key in ascending 
order.
+       // Returns nil if no entries match.
+       // Returns true if all data is fetched, false if only partial data is 
fetched.
+       //
+       MultiGet(ctx context.Context, hashKey []byte, sortKeys [][]byte) 
([]*KeyValue, bool, error)
+       MultiGetOpt(ctx context.Context, hashKey []byte, sortKeys [][]byte, 
options *MultiGetOptions) ([]*KeyValue, bool, error)
+```
+注:  
+* 参数:需传入context、hashKey、sortKeys。  
+* 返回值:得到的kvs、bool值代表是否all fetched, error  
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型(key对应数据不存在不会报错)。  
+* 
bool值表示:如果用户指定了maxFetchCount或者maxFetchSize,单次查询可能只获取到部分结果。如果所有满足条件的数据都已经获取到,则返回true;否则返回false。
+``` go
+    // MultiGetOptions is the options for MultiGet and MultiGetRange, defaults 
to DefaultMultiGetOptions.
+    type MultiGetOptions struct {
+           StartInclusive bool
+           StopInclusive  bool
+           SortKeyFilter  Filter
+           // MaxFetchCount and MaxFetchSize limit the size of returned result.
+           // Max count of k-v pairs to be fetched. MaxFetchCount <= 0 means 
no limit.
+           MaxFetchCount int
+           // Max size of k-v pairs to be fetched. MaxFetchSize <= 0 means no 
limit.
+           MaxFetchSize int
+           // Query order
+           Reverse bool
+           // Whether to retrieve keys only, without value.
+           // Enabling this option will reduce the network load, improve the 
RPC latency.
+           NoValue bool
+    }
+
+    // Filter is used to filter based on the key.
+    type Filter struct {
+           Type    FilterType
+           Pattern []byte
+    }
+
+    // Filter types
+       const (
+       FilterTypeNoFilter      = FilterType(rrdb.FilterType_FT_NO_FILTER)
+       FilterTypeMatchAnywhere = FilterType(rrdb.FilterType_FT_MATCH_ANYWHERE)
+       FilterTypeMatchPrefix   = FilterType(rrdb.FilterType_FT_MATCH_PREFIX)
+       FilterTypeMatchPostfix  = FilterType(rrdb.FilterType_FT_MATCH_POSTFIX)
+       )
+```
+注:  
+* MultiGetOptions说明:  
+    * startInclusive:是否包含StartSortKey,默认为true。  
+    * stopInclusive:是否包含StopSortKey,默认为false。  
+    * SortKeyFilter: SortKey过滤项  
+    * 
maxFetchCount和maxFetchSize用于限制读取的数据量,maxFetchCount表示最多读取的数据条数,maxFetchSize表示最多读取的数据字节数,两者任一达到限制就停止读取.
 MaxFetchCount 默认为100, MaxFetchSize 默认为100000  
+    * noValue:只返回HashKey和SortKey,不返回Value数据,默认为false。  
+    * reverse:是否逆向扫描数据库,从后往前查找数据。但是查找得到的结果在list中还是按照SortKey从小到大顺序存放。从Pegasus 
Server 1.8.0 时开始支持。  
+* Filter说明:  
+    * type: 过滤类型,包括无过滤、任意位置匹配、前缀匹配和后缀匹配  
+    * Pattern: 过滤模式串,空串相当于无过滤。
+* Filter types 说明:    
+    * FilterTypeNoFilter:无过滤
+    * FilterTypeMatchAnywhere: 任意位置匹配
+    * FilterTypeMatchPrefix: 前缀匹配
+    * FilterTypeMatchPostfix: 后缀匹配
+
+### MultiGetRange | MultiGetRangeOpt
+读**同一HashKey下**的多行数据,支持范围查询。
+``` go
+       // MultiGetRange retrieves the multiple entries under `hashKey`, 
between range (`startSortKey`, `stopSortKey`),
+       // atomically in one operation.
+       //
+       // startSortKey: nil or len(startSortKey) == 0 means start from begin.
+       // stopSortKey: nil or len(stopSortKey) == 0 means stop to end.
+       // `hashKey` : CAN'T be nil.
+       //
+       // The returned key-value pairs are sorted by sort keys in ascending 
order.
+       // Returns nil if no entries match.
+       // Returns true if all data is fetched, false if only partial data is 
fetched.
+       //
+       MultiGetRange(ctx context.Context, hashKey []byte, startSortKey []byte, 
stopSortKey []byte) ([]*KeyValue, bool, error)
+       MultiGetRangeOpt(ctx context.Context, hashKey []byte, startSortKey 
[]byte, stopSortKey []byte, options *MultiGetOptions) ([]*KeyValue, bool, error)
+```
+注:
+* 参数:需传入context、hashKey、startSortKey、stopSortKey  
+* 返回值:kvs、bool值代表是否all fetched, error  
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型(key对应数据不存在不会报错)。  
+
+
+### MultiSet | MultiSetOpt
+写同一HashKey下的多行数据。
+``` go
+       // MultiSet sets the multiple entries for `hashKey` + `sortKeys[i]` 
atomically in one operation.
+       // `hashKey` / `sortKeys` / `values` : CAN'T be nil or empty.
+       // `sortKeys[i]` / `values[i]` : CAN'T be nil but CAN be empty.
+       MultiSet(ctx context.Context, hashKey []byte, sortKeys [][]byte, values 
[][]byte) error
+       MultiSetOpt(ctx context.Context, hashKey []byte, sortKeys [][]byte, 
values [][]byte, ttl time.Duration) error
+
+```
+注:
+* MultiSet调用了rocksdb的WriteBatch接口,因此MultiSet是一个原子操作
+* 提供了两个版本的接口,其中第二个接口可以指定TTL时间。
+* 参数:需传入context、hashKey、sortKeys、values、ttl(可选,单位为s)
+* 返回值:error 
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+  
+### MultiDel
+``` go
+       // MultiDel deletes the multiple entries under `hashKey` all atomically 
in one operation.
+       // `hashKey` / `sortKeys` : CAN'T be nil or empty.
+       // `sortKeys[i]` : CAN'T be nil but CAN be empty.
+       MultiDel(ctx context.Context, hashKey []byte, sortKeys [][]byte) error
+```
+注:
+* MultiDel调用了rocksdb的WriteBatch接口,因此MultiDel是一个原子操作
+* 参数:需传入context、hashKey、sortKeys
+* 返回值:error 
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+
+### DelRange | DelRangeOpt
+``` go
+       // DelRange /DelRangeOpt deletes the multiple entries under `hashKey`, 
between range (`startSortKey`, `stopSortKey`),
+       // atomically in one operation.
+       // DelRange is identical to DelRangeOpt except that the former uses 
DefaultDelRangeOptions as `options`.
+       //
+       // startSortKey: nil or len(startSortKey) == 0 means to start from the 
first entry in the sorted key range.
+       // stopSortKey: nil or len(stopSortKey) == 0 means to stop at the last 
entry in the sorted key range.
+       // `hashKey` : CAN'T be nil or empty.
+       DelRange(ctx context.Context, hashKey []byte, startSortKey []byte, 
stopSortKey []byte) error
+       DelRangeOpt(ctx context.Context, hashKey []byte, startSortKey []byte, 
stopSortKey []byte, options *DelRangeOptions) error
+
+       // DelRangeOptions is the options for DelRange, defaults to 
DefaultDelRangeOptions.
+       type DelRangeOptions struct {
+               nextSortKey    []byte
+               StartInclusive bool
+               StopInclusive  bool
+               SortKeyFilter  Filter
+       }
+```
+注:
+* DelRange实际调用了多次MultiDel, 每次MultiDel是原子的,但是DelRange整体可能不是原子的。
+* 参数:需传入context、hashKey、startSortKey、stopSortKey
+* 返回值:error 
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+* DelRangeOptions:
+    * nextSortKey: 
DelRange会按照sortkey的大小顺序进行删除,假如删除过程中失败,会将未删除成功第一个sortkey保存在nextSortKey
+    * StartInclusive: 删除时是否包括startSortKey
+    * StopInclusive: 删除时是否包括stopSortKey
+    * SortKeyFilter: 可以对Sortkey进行筛选
+
+### TTL
+获取某个key的TTL
+``` go
+       // Returns ttl(time-to-live) in seconds: -1 if ttl is not set; -2 if 
entry doesn't exist.
+       // `hashKey` : CAN'T be nil or empty.
+       // `sortKey` : CAN'T be nil but CAN be empty.
+       TTL(ctx context.Context, hashKey []byte, sortKey []byte) (int, error)
+```
+注:
+* 参数:需传入context、hashKey、sortKey
+* 返回值:int,error 
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型       
+
+### Exist
+判断某个key是否存在
+``` go
+       // Check value existence for the entry for `hashKey` + `sortKey`.
+       // `hashKey`: CAN'T be nil or empty.
+       Exist(ctx context.Context, hashKey []byte, sortKey []byte) (bool, error)
+```
+注:
+* 参数:需传入context、hashKey、sortKey
+* 返回值:bool,error 
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型       
+
+### GetScanner
+获取遍历某个HashKey下所有数据的迭代器,用于局部扫描。
+``` go
+       // Get Scanner for {startSortKey, stopSortKey} within hashKey.
+       // startSortKey: nil or len(startSortKey) == 0 means start from begin.
+       // stopSortKey: nil or len(stopSortKey) == 0 means stop to end.
+       // `hashKey`: CAN'T be nil or empty.
+       GetScanner(ctx context.Context, hashKey []byte, startSortKey []byte, 
stopSortKey []byte, options *ScannerOptions) (Scanner, error)
+
+       // ScannerOptions is the options for GetScanner and 
GetUnorderedScanners.
+       type ScannerOptions struct {
+               BatchSize      int  // internal buffer batch size
+               StartInclusive bool // if the startSortKey is included
+               StopInclusive  bool // if the stopSortKey is included
+               HashKeyFilter  Filter
+               SortKeyFilter  Filter
+               NoValue        bool // only fetch hash_key and sort_key, but 
not fetch value
+       }
+```  
+注:
+* 参数:需传入context、hashKey、startSortKey、stopSortKey、ScannnerOptions
+    * startSortKey和stopSortKey用于指定scan的返回,并通过ScanOptions指定区间的开闭。
+    * 如果startSortKey为null,表示从头开始;如果stopSortKey为null,表示一直读到尾。
+    * ScannnerOptions说明:
+        * BatchSize: 从server端读取数据时每批数据的个数,默认值为1000
+        * startInclusive:是否包含startSortKey,默认为true
+        * stopInclusive: 是否包含stopSortKey,默认为false
+        * HashKeyFilter: hashkey的筛选,默认无筛选
+        * SortKeyFilter: sortkey的筛选,默认无筛选
+        * NoValue: 只返回HashKey和SortKey,不返回Value数据,默认为false
+* 返回值:迭代器Scanner, error
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型       
+
+
+### GetUnorderedScanners
+获取遍历整个表的所有数据的迭代器,用于全局扫描。
+``` go
+       // Get Scanners for all data in pegasus, the count of scanners will
+       // be no more than maxSplitCount
+       GetUnorderedScanners(ctx context.Context, maxSplitCount int, options 
*ScannerOptions) ([]Scanner, error)
+```
+注:
+* 参数:需传入context、maxSplitCount、ScannnerOptions
+    * 
maxSplitCount:用于决定返回的迭代器的个数。当返回多个迭代器时,每个迭代器可以访问表中的部分数据。通过返回迭代器列表,用户可以进行并发scan或者在MapReduce中使用。如果不需要多个迭代器,可以将其设置为1。
+* 返回值:迭代器Scanner数组, error
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+
+### Next
+在scan操作时,同步获取下一条数据。
+``` go
+       // Scanner defines the interface of client-side scanning.
+       type Scanner interface {
+       // Grabs the next entry.
+               Next(ctx context.Context) (completed bool, hashKey []byte, 
sortKey []byte, value []byte, err error)
+
+               Close() error
+       }
+```
+注:
+* 参数:需传入context
+* 返回值:completed、hashKey、sortKey、value、err
+    * completed: true表示遍历结束.
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+
+### CheckAndSet  
+单hashKey数据的原子CAS操作(可以理解为单行原子操作)。详细说明参见[单行原子操作](/api/single-atomic#cas操作)。  
+该操作先对某个SortKey(称之为checkSortKey)的value做条件检查:    
+  * 如果检查的条件满足,则将另一个SortKey(称之为setSortKey)的value设置为新值。  
+  * 如果检查的条件不满足,则不执行set操作。    
+
+checkSortKey和setSortKey可以相同也可以不同。  
+用户还可以设置`CheckAndSetOptions.ReturnCheckValue`来获取CheckSortKey对应的value。如果CheckSortKey和SetSortKey相同并且set成功,则获取set之前的旧值。
+
+``` go
+       // Atomically check and set value by key from the cluster. The value 
will be set if and only if check passed.
+       // The sort key for checking and setting can be the same or different.
+       //
+       // `checkSortKey`: The sort key for checking.
+       // `setSortKey`: The sort key for setting.
+       // `checkOperand`:
+       CheckAndSet(ctx context.Context, hashKey []byte, checkSortKey []byte, 
checkType CheckType,
+               checkOperand []byte, setSortKey []byte, setValue []byte, 
options *CheckAndSetOptions) (*CheckAndSetResult, error)
+       
+
+       // The value checking types
+       const (
+               CheckTypeNoCheck = CheckType(rrdb.CasCheckType_CT_NO_CHECK)
+
+               // existence
+               CheckTypeValueNotExist        = 
CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EXIST)          // value is    not 
exist
+               CheckTypeValueNotExistOrEmpty = 
CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EXIST_OR_EMPTY) // value is    not 
exist or value is empty
+               CheckTypeValueExist           = 
CheckType(rrdb.CasCheckType_CT_VALUE_EXIST)              // value is    exist
+               CheckTypeValueNotEmpty        = 
CheckType(rrdb.CasCheckType_CT_VALUE_NOT_EMPTY)          // value is    exist 
and not empty
+
+               // match
+               CheckTypeMatchAnywhere = 
CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_ANYWHERE) // operand matches        
anywhere in value
+               CheckTypeMatchPrefix   = 
CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_PREFIX)   // operand matches        
prefix in value
+               CheckTypeMatchPostfix  = 
CheckType(rrdb.CasCheckType_CT_VALUE_MATCH_POSTFIX)  // operand matches        
postfix in value
+
+               // bytes compare
+               CheckTypeBytesLess           = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_LESS)             // bytes    
compare: value < operand
+               CheckTypeBytesLessOrEqual    = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_LESS_OR_EQUAL)    // bytes    
compare: value <= operand
+               CheckTypeBytesEqual          = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_EQUAL)            // bytes    
compare: value == operand
+               CheckTypeBytesGreaterOrEqual = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER_OR_EQUAL) // bytes    
compare: value >= operand
+               CheckTypeBytesGreater        = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER)          // bytes    
compare: value > operand
+
+               // int compare: first transfer bytes to int64; then compare by 
int value
+               CheckTypeIntLess           = 
CheckType(rrdb.CasCheckType_CT_VALUE_INT_LESS)             // int  compare: 
value < operand
+               CheckTypeIntLessOrEqual    = 
CheckType(rrdb.CasCheckType_CT_VALUE_INT_LESS_OR_EQUAL)    // int  compare: 
value <= operand
+               CheckTypeIntEqual          = 
CheckType(rrdb.CasCheckType_CT_VALUE_INT_EQUAL)            // int  compare: 
value == operand
+               CheckTypeIntGreaterOrEqual = 
CheckType(rrdb.CasCheckType_CT_VALUE_INT_GREATER_OR_EQUAL) // int  compare: 
value >= operand
+               CheckTypeIntGreater        = 
CheckType(rrdb.CasCheckType_CT_VALUE_BYTES_GREATER)        // int  compare: 
value > operand
+       )
+
+
+       // CheckAndSetOptions is the options of a CAS.
+       type CheckAndSetOptions struct {
+               SetValueTTLSeconds int  // time to live in seconds of the set 
value, 0 means no ttl.
+               ReturnCheckValue   bool // if return the check value in results.
+       }
+       
+
+       // CheckAndSetResult is the result of a CAS.
+       type CheckAndSetResult struct {
+               // true if set value succeed.
+               SetSucceed bool
+
+               // the actual value if set value failed; null means the actual 
value is not exist.
+               CheckValue []byte
+
+               // if the check value is exist; can be used only when 
checkValueReturned is true.
+               CheckValueExist bool
+
+               // return the check value if exist; can be used only when 
checkValueExist is true.
+               CheckValueReturned bool
+       }
+
+```
+注:
+* 
参数:需传入context、hashKey、checkSortKey、checkType、checkOperand、setSortKey、setValue、CheckAndSetOptions
+    * checkSortKey、checkType、checkOperand:用于指定检查的条件。
+    * setSortKey、setValue:用于指定条件检查成功后要set的新值。
+    * options:其他选项,包括:
+        * SetValueTTLSeconds:新值的TTL时间;TTL必须>=0,0表示不设置TTL限制。当<0时返回报错。
+        * ReturnCheckValue:是否需要返回CheckSortKey对应的value。
+* 返回值:CheckAndSetResult、error
+    * SetSucceed: 是否set成功。
+    * CheckValue: CheckSortKey对应的value值;该域只有在checkValueExist=true时有意义。
+    * CheckValueExist: 
CheckSortKey对应的value是否存在;该域只有在checkValueReturned=true时有意义。
+    * CheckValueReturned: 是否返回了CheckSortKey对应的value。
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+
+### SortKeyCount
+获取某个HashKey下所有SortKey的个数。
+
+``` go
+       // Returns the count of sortkeys under hashkey.
+       // `hashKey`: CAN'T be nil or empty.
+       SortKeyCount(ctx context.Context, hashKey []byte) (int64, error)
+```
+注:
+* 参数:需传入context、hashKey
+* 返回值:返回HashKey下所有SortKey的个数
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型
+  
+### Incr
+单行原子增(减)操作。详细说明参见[单行原子操作](/api/single-atomic#cas操作)。  
+该操作先将key所指向的value的字节串转换为int64类型, 然后加上increment,将结果转换为字节串设置为新值。
+当参数increment为正数时,即原子加;当参数increment为负数时,即原子减。
+``` go
+       // Atomically increment value by key from the cluster.
+       // Returns the new value.
+       // `hashKey` / `sortKeys` : CAN'T be nil or empty
+       Incr(ctx context.Context, hashKey []byte, sortKey []byte, increment 
int64) (int64, error)
+```
+注:
+* 参数:需传入context、hashKey、sortkey、increment
+* 返回值:操作成功后的新值、error
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型。另外以下情况也会抛出异常:
+    * 旧值转换为int64时出错,譬如不是合法的数字或者超出int64范围。
+    * 旧值加上increment后的结果超出int64范围。
+* 其他说明:
+    * 如果旧值不存在,则把旧值当做0处理,即新值等于increment。
+    * TTL语义:如果旧值存在,新值的TTL和旧值保持一致;如果旧值不存在,新值将不设TTL。
+  
+### BatchGet
+读取一批数据,对get函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常。如果抛出了异常,则values中的结果是未定义的。
+``` go
+       // Gets values from a batch of CompositeKeys. Internally it distributes 
each key
+       // into a Get call and wait until all returned.
+       //
+       // `keys`: CAN'T be nil or empty, `hashkey` in `keys` can't be nil or 
empty either.
+       // The returned values are in sequence order of each key, aka `keys[i] 
=> values[i]`.
+       // If keys[i] is not found, or the Get failed, values[i] is set nil.
+       //
+       // Returns a non-nil `err` once there's a failed Get call. It doesn't 
mean all calls failed.
+       //
+       // NOTE: this operation is not guaranteed to be atomic
+       BatchGet(ctx context.Context, keys []CompositeKey) (values [][]byte, 
err error)
+```
+注:
+* 参数:需传入context、CompositeKey
+* 返回值:Values、error。如果读取成功,Values[i]中存放Keys[i]对应的结果,如果value不存在则为null。
+* 异常:如果出现异常,譬如网络错误、超时错误、服务端错误等,可以访问error获取具体错误类型。
+* 其他说明:
+    * 该方法不是原子的,有可能出现部分成功部分失败的情况,只要任意一个失败都会抛出异常。


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to