本文整理汇总了Golang中github.com/jmhodges/levigo.WriteBatch.Close方法的典型用法代码示例。如果您正苦于以下问题:Golang WriteBatch.Close方法的具体用法?Golang WriteBatch.Close怎么用?Golang WriteBatch.Close使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/jmhodges/levigo.WriteBatch
的用法示例。
在下文中一共展示了WriteBatch.Close方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestCommands
func (s CommandSuite) TestCommands(c *C) {
for _, t := range tests {
cmd := commands[t.command]
var wb *levigo.WriteBatch
if cmd.writes {
wb = levigo.NewWriteBatch()
}
var args [][]byte
if t.args != "" {
if cmd.arity > 0 {
args = bytes.SplitN([]byte(t.args), []byte(" "), cmd.arity)
} else {
args = bytes.Split([]byte(t.args), []byte(" "))
}
}
cmd.lockKeys(args)
res := cmd.function(args, wb)
if cmd.writes {
err := DB.Write(DefaultWriteOptions, wb)
c.Assert(err, IsNil)
wb.Close()
}
cmd.unlockKeys(args)
if stream, ok := res.(*cmdReplyStream); ok {
items := make([]interface{}, 0, int(stream.size))
for item := range stream.items {
items = append(items, item)
}
res = items
}
if reply, ok := res.(rawReply); ok {
if reply[0] == '+' {
res = string(reply[1 : len(reply)-2])
}
}
c.Assert(res, DeepEquals, t.response, Commentf("%s %s, obtained=%s expected=%s", t.command, t.args, res, t.response))
}
}
示例2: protocolHandler
func protocolHandler(c *client) {
// Read a length (looks like "$3\r\n")
readLength := func(prefix byte) (length int, err error) {
b, err := c.r.ReadByte()
if err != nil {
return
}
if b != prefix {
writeProtocolError(c.w, "invalid length")
return
}
l, overflowed, err := c.r.ReadLine() // Read bytes will look like "123"
if err != nil {
return
}
if overflowed {
writeProtocolError(c.w, "length line too long")
return
}
if len(l) == 0 {
writeProtocolError(c.w, "missing length")
return
}
length, err = bconv.Atoi(l)
if err != nil {
writeProtocolError(c.w, "length is not a valid integer")
return
}
return
}
runCommand := func(args [][]byte) (err error) {
if len(args) == 0 {
writeProtocolError(c.w, "missing command")
return
}
// lookup the command
command, ok := commands[UnsafeBytesToString(bytes.ToLower(args[0]))]
if !ok {
writeError(c.w, "unknown command '"+string(args[0])+"'")
return
}
// check command arity, negative arity means >= n
if (command.arity < 0 && len(args)-1 < -command.arity) || (command.arity >= 0 && len(args)-1 > command.arity) {
writeError(c.w, "wrong number of arguments for '"+string(args[0])+"' command")
return
}
// call the command and respond
var wb *levigo.WriteBatch
if command.writes {
wb = levigo.NewWriteBatch()
defer wb.Close()
}
command.lockKeys(args[1:])
res := command.function(args[1:], wb)
if command.writes {
if _, ok := res.(error); !ok { // only write the batch if the return value is not an error
err = DB.Write(DefaultWriteOptions, wb)
}
if err != nil {
writeError(c.w, "data write error: "+err.Error())
return
}
}
command.unlockKeys(args[1:])
writeReply(c.w, res)
return
}
processInline := func() error {
line, err := c.r.ReadBytes('\n')
if err != nil {
return err
}
return runCommand(bytes.Split(line[:len(line)-2], []byte(" ")))
}
scratch := make([]byte, 2)
args := [][]byte{}
// Client event loop, each iteration handles a command
for {
// check if we're using the old inline protocol
b, err := c.r.Peek(1)
if err != nil {
return
}
if b[0] != '*' {
err = processInline()
if err != nil {
return
}
continue
}
// Step 1: get the number of arguments
argCount, err := readLength('*')
//.........这里部分代码省略.........