我正在尝试执行一些插入查询,每个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)(重试布尔)
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
。我想念什么吗? 最佳答案
sqlite3.BusyFunc是一种类型。您正在做的是将一个函数转换为该类型,结果您得到了该类型的函数。相反,您必须向以下位置注册功能:
func (c *Conn) BusyFunc(f BusyFunc) (prev BusyFunc)
基本上将conn句柄的名称更改为“sqlite3”即可完成工作,只需获取返回值即可。