解决 Go 中使用 Sqlite 报错 go-sqlite3 requires cgo to work
使用 GORM 配合 SQlite 使用遇到的问题
发布于 星期四,三月 21 2024
环境
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
相关的东西
- Golang
- GORM