我正在尝试执行一些插入查询,每个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
。我错过了什么吗?
答案 0 :(得分:1)
sqlite3.BusyFunc是一种类型。您正在做的是将函数转换为该类型,因此您将获得该类型的函数。相反,您必须使用以下命令注册您的功能:
func (c *Conn) BusyFunc(f BusyFunc) (prev BusyFunc)
基本上改变" sqlite3"对于conn句柄的名称应该做的工作,只需获取返回值。