解决 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

解决步骤

  1. 点这个链接下载 MinGW 的压缩包。或者访问MinGW-w64 - for 32 and 64 bit Windows Files找到 x86_64-posix-xxxx 链接,点击它下载

    w641.webp

  2. 解压后会得到一个 mingw64 的文件夹,把这个文件夹复制到 C:\Program Files 目录下,把 C:\Program Files\mingw64\bin 这个路径添加到 PATH 系统环境变量(这个不会的得自己百度了)

    bin 目录下有很多可执行文件,可以用来编译执行 CC++ 代码。把bin目录加入到 PATH 系统环境变量是为了直接执行 gcc 等命令可以正确找到可执行文件

    mingw64-bin1.webp

    PATH 系统环境变量

    system-path1.webp

  3. 添加到 PATH 系统环境变量后,在终端执行下面命令开启 cgo

$ go env -w CGO_ENABLED=1
  1. **重启你当前的终端或者新开一个终端tab,这样环境变量才会生效。如果是在 VS Code 的终端执行命令,需要重启 VS Code **

  2. 最后正常启动项目即可,第一次启动项目可能会有点慢,因为需要执行 cgo 编译打包好 SQlite 相关的东西

  • Golang
  • GORM