CGO_ENABLED=0 导致 SQLite 驱动初始化失败

执行了go test ./... 以后出现下面的bug

Go 复制代码
?       practic_todolist/cmd/todo       [no test files]
?       practic_todolist/internal/config        [no test files]

2026/04/15 22:44:19 C:/Users/gaoru/Desktop/practic_todolist/internal/handler/todo_handler_test.go:34
[error] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
--- FAIL: TestTodoHandlerEndpoints (0.01s)
    todo_handler_test.go:55: open test database: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
FAIL
FAIL    practic_todolist/internal/handler       1.211s
?       practic_todolist/internal/model [no test files]
?       practic_todolist/internal/repository    [no test files]
ok      practic_todolist/internal/service       0.596s
?       practic_todolist/pkg/database   [no test files]
FAIL

解决办法:

我的测试代码在连接 SQLite 时失败了,因为当前Go环境是CGO_ENABLED=0,而我现在用的 SQLite 驱动需要CGO。

更直白一点:

项目里的service测试能过,是因为它用了mock仓库,不需要真连数据库,handler集成测试会真的打开 SQLite 内存库,我现在的 SQLite 驱动底层依赖 go-sqlite3,go-sqlite3 在Windows 上通常需要:CGO_ENABLED=1,本机有 C 编译器,但我当前测试是用禁用 CGO 的方式编译出来的,所以数据库初始化直接失败了

报错里这句就是核心:

Binary was compiled with 'CGO_ENABLED=0'

go-sqlite3 requires cgo to work

这意味着目前不是我的业务代码逻辑错了,而是运行环境和SQLite驱动不匹配

有两种解决方案:

第一种是开启 CGO,并安装 C 编译环境

适合继续使用当前 gorm.io/driver/sqlite

先检查

Go 复制代码
go env CGO_ENABLED
gcc --version

如果 CGO_ENABLED 是 0,可以尝试:

Go 复制代码
go env -w CGO_ENABLED=1

但在 Windows 上,通常还要安装 gcc,否则还是不行。

第二种则就是把项目改成"不依赖 CGO"的纯 Go SQLite 驱动。

相关推荐
2302_11116 分钟前
java依赖小结
java·运维·数据库
听到微笑42 分钟前
Elasticsearch 如何存储与检索海量向量
数据库·elasticsearch
海浪仙人掌1 小时前
速动比率怎么分析?速动比率分析有哪些注意事项?
大数据·数据库·人工智能
企业数字化笔记1 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
挖掘狂人1 小时前
从 LLM 到 Agent Skill:9 个底层概念,一次理清整个 AI 技术栈
llm·agent·ai编程
凭君语未可1 小时前
我把 Codex 变成了一个本地 API:Codex Proxy 配置实战
ai编程
还是奇怪1 小时前
OpenAI GPT-5.6 构建指南拆解:创业公司如何用模型选择与 Responses API 降低 Agent 成本
java·数据库·人工智能·gpt
可涵不会debug1 小时前
LangChain 文本分割器详解:字符分割、Token 分割、硬约束递归分割实战
java·前端·数据库
sarasuki1 小时前
Agent 陷入死循环了怎么办?指纹 + 滑动窗口 + 分层熔断
人工智能·ai编程
风哥2号1 小时前
数据库教程FGMT21‑Oracle RAC+DG生产实战(1):Oracle19c/26ai for RHEL8/9安装配置+补丁
数据库·oracle