Golang 可以用 bin-data 或者 packr 等打包工具,把一些如 css, html, js 的文件和可执行程序打包在一起执行。
我想也把 SQLite 的文件也同时打包进去,这个程序只有读取的操作,没有增删改的操作,因此就不用担心如何更新打包到可执行程序里的 SQLite 文件了。
|  |      1wangsongyan      2019-08-03 16:25:21 +08:00 via iPhone 那就是个普通文件,没问题啊 | 
|  |      2niuoh      2019-08-03 16:36:12 +08:00 via Android 换个思路 在执行过程中 把 sqllite 从远程下载到某个目录并加载 | 
|  |      3keepeye      2019-08-03 17:01:44 +08:00 把整个二进制文件转成 16 进制字符串嵌到你的代码里,运行的时候写到一个临时文件里 然后 sqlite 加载 | 
|  |      4Rheinmetal      2019-08-03 17:45:19 +08:00 都在代码里面了  不用再临时文件了吧 直接读内存咯 | 
|  |      5TangMonk OP @Rheinmetal 怎么搞,求代码 | 
|  |      8TangMonk OP @wangsongyan #1 golang 的 sqlite 包只能用 Connection String 链接 | 
|  |      9Reficul      2019-08-03 18:07:06 +08:00 go-bin-data  + go generate 在构建的时候打包进去就行 | 
|  |      10Reficul      2019-08-03 18:10:43 +08:00 go 的 sqlite 是 cgo binding,sqlite 本身是支持内存数据库的,只不过坊间传言好像锁会失效。 另外如果用 Go 的 afero 这种虚拟文件系统,可能会因为 cgo 的原因,c 代码不能感知。 | 
|  |      11TangMonk OP @Reficul #9 内存数据库也得要通过 Connection String 来链接,我只有把 sqlite 文件打包进可执行程序,然后程序解压放到临时目录然后再读取了。 | 
|  |      13rrfeng      2019-08-03 20:18:59 +08:00 via Android 那还用啥 SQLite ?? | 
|      15SuperMild      2019-08-03 21:05:47 +08:00 如果文件比较大,那么不管采用什么方法,都只能要么每次启动时全部读进内存,要么每次启动时写临时文件。感觉还不如在第一次启动时检查与程序相同目录下有没有 sqlite 数据库文件,没有就生成一个,以后直接使用。 | 
|  |      16AlvaIM      2019-08-03 21:12:28 +08:00 3 楼正解,理论上是可行的,但是有什么必要呢? | 
|  |      17reus      2019-08-03 22:23:44 +08:00 何必,和程序一起发布不就行了 | 
|  |      18wangsongyan      2019-08-03 22:38:51 +08:00 @TangMonk 换个思路,你直接把 sql 打进可执行文件,启动的时候创建一个内存数据库,再把数据写进去 | 
|  |      19ksedz      2019-08-03 22:43:24 +08:00  1 感觉这个可以满足要求 https://github.com/rakyll/statik | 
|  |      20rrfeng      2019-08-03 23:40:23 +08:00 @TangMonk  你用 sqlite 不是还要用 gosql 去操作,写个对应表结构的 struct 那为啥不直接写好 struct 然后代码里用 const 写一遍就行了呗。就是这个代码文件会很长,但是可以自动生成啊 | 
|  |      23TangMonk OP | 
|  |      24ysc3839      2019-08-04 15:55:10 +08:00 via Android SQLite 有 VFS 的功能 https://www.sqlite.org/vfs.html 大概可以自己实现一个内存 VFS。 不考虑 Windows 的话大概还可以用 open_memstream https://linux.die.net/man/3/open_memstream |