正确使用sqlite3.BusyFunc使用go?

时间:2014-04-24 19:06:36

标签: sqlite go

我正在尝试执行一些插入查询,每个goroutine一次查询(请参阅emulating multiple requests to sqlite database as goroutine causes random panic中的代码)但大部分失败并出现错误:数据库文件被锁定。

我在http://godoc.org/code.google.com/p/go-sqlite/go1/sqlite3#BusyFunc找到了以下内容:

  

输入BusyFunc func(count int)(重试bool)
  BusyFunc是SQLite在无法获取表锁时调用的回调函数。 Count是到目前为止为此锁定事件调用回调的次数。如果函数返回false,则中止操作。否则,函数应该在返回true之前阻塞一段时间并让SQLite进行另一次锁定尝试。

我插入了以下代码:

sqlite3.BusyFunc(func(counted int) (bool) { 
    if counted > 10 { 
        return false 
    } else { 
        return true
    }
})

但它返回sqlite3.BusyFunc(func literal) evaluated but not used。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

sqlite3.BusyFunc是一种类型。您正在做的是将函数转换为该类型,因此您将获得该类型的函数。相反,您必须使用以下命令注册您的功能:

func (c *Conn) BusyFunc(f BusyFunc) (prev BusyFunc)

基本上改变" sqlite3"对于conn句柄的名称应该做的工作,只需获取返回值。