我正在尝试执行一些插入查询,每个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”即可完成工作,只需获取返回值即可。

07-28 09:29