解决 Go 中使用 Sqlite 报错 go-sqlite3 requires cgo to work
使用 GORM 配合 SQlite 使用遇到的问题
环境
Windows 10 系统
前言
在使用 GORM 中连接 SQlite 数据库时,启动项目报错,错误信息如下
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
问题原因
从错误信息里可以看到,是 cgo 没跑起来和 CGO_ENABLED=0,我隐约记得以前遇到过,这是因为Windows上面默认是没有 gcc 的,所以 cgo 跑不起来。Windows 上面可以安装 MinGW 获得 gcc
总之,就是 SQlite 需要 C 环境,cgo 也需要 C 环境,这都要 gcc 来支持
PS:这也是为什么这种错误大多发生在 Windows 上的原因,因为 Mac和 Linux 都默认安装了
gcc
解决步骤
-
点这个链接下载
MinGW的压缩包。或者访问MinGW-w64 - for 32 and 64 bit Windows Files找到x86_64-posix-xxxx链接,点击它下载
-
解压后会得到一个
mingw64的文件夹,把这个文件夹复制到C:\Program Files目录下,把C:\Program Files\mingw64\bin这个路径添加到PATH系统环境变量(这个不会的得自己百度了)bin目录下有很多可执行文件,可以用来编译执行C、C++代码。把bin目录加入到PATH系统环境变量是为了直接执行gcc等命令可以正确找到可执行文件
PATH系统环境变量
-
添加到
PATH系统环境变量后,在终端执行下面命令开启cgo
$ go env -w CGO_ENABLED=1
-
**重启你当前的终端或者新开一个终端tab,这样环境变量才会生效。如果是在
VS Code的终端执行命令,需要重启VS Code** -
最后正常启动项目即可,第一次启动项目可能会有点慢,因为需要执行
cgo编译打包好SQlite相关的东西