通过go操作sqlite3遇到"database is locked"问题
前言
此问题是本人在使用go语言客户端框架wails时遇到的一个问题, 最初是由于浏览器端调试窗口和实际客户端调试窗口的结果不一致问题引发。随后不断定位发现是由于使用Gorm操作sqlite3数据库时发生了”database is locked”现象, 而浏览器端调试窗口正常也说明了浏览器的性能瓶颈限制还不足以引发这个错误, 客户端窗口报错也进一步印证了通过webview2的客户端技术不光是打包体积有优势, 并且结合go语言后实际性能更高, 可以大大利用前端技术的便利性来降低大多数对性能要求没那么苛刻的客户端开发场景。
原因
sqlite是不支持多链接的, 而通过go-sqlite3或者是gorm这些库来操作sqlite3时默认会产生多个链接, 因此需要通过手动配置来限制链接数量从而保证并发安全。
解决方法
手动设置最大链接数即可
newbing给的解决方案(未验证是否可行)
(下面方法对于本问题或许南辕北辙了,因为’sqlite3本身不提供无限阻塞’,只能通过go锁来处理了但go锁无法实际解决这个问题, 故仅给出来自newbing的回答 -> 此回答本人未使用未验证)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 道远日暮时不存!