发布于 2018-08-29 05:26:15
在一个小的源潜水之后,我在sqlite3.go中看到这个
name := C.CString(dsn)
defer C.free(unsafe.Pointer(name))
rv := C._sqlite3_open_v2(name, &db,
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
nil)
因此,这回答了您的问题,数据库的实际打开发生在sqlite3
库的“外部”“Go”和“内部”。如果我们检查函数sqlite3_open_v2
,我们可以看到它需要一个文件名:
int sqlite3_open_v2(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb, /* OUT: SQLite db handle */
int flags, /* Flags */
const char *zVfs /* Name of VFS module to use */
);
我认为这里唯一的方法是实现您自己的Sqlite,它以某种方式与afero
抽象交互。
https://stackoverflow.com/questions/52077914
复制