Go mod 好菜系列 - 0x09 sqlx 夹在原生 SQL 和 ORM 之间的那口菜

详细讲 sqlx 为什么受欢迎、比 database/sql 多了什么、比 ORM 少了什么,以及它为什么适合想手写 SQL 但又不想太原始的人。

如果你对 gorm 这种 ORM 的感觉是“方便是方便,但总怕它在背后搞了我不想要的 SQL”,那你大概率会喜欢 sqlx 这种路线。它不像 ORM 那么强调模型驱动,也不像原生 database/sql 那么朴素到什么都得自己搓。

sqlx 到底是什么

可以把它理解成 database/sql 的增强版工具层。它没有想替你发明一套 ORM 世界观,而是尽量保留原生 SQL 的掌控感,同时补一些“明明很基础却老得手写”的能力。

它最让人舒服的地方:结构体映射

type User struct {
    ID    int64  `db:"id"`
    Name  string `db:"name"`
    Email string `db:"email"`
}
var user User
err := db.Get(&user, "SELECT id, name, email FROM users WHERE id = ?", 1)

对比原生 Scan 一列一列手摆,这种写法轻松很多,尤其字段一多的时候价值特别明显。

查多条也很顺

var users []User
err := db.Select(&users, "SELECT id, name, email FROM users ORDER BY id DESC LIMIT 20")

这类“我 SQL 自己写,但结果映射你帮我收一收”的手感,就是 sqlx 最迷人的地方。

命名参数也很有用

query := "SELECT * FROM users WHERE name = :name AND status = :status"
args := map[string]interface{}{
    "name":   "Raymond",
    "status": "active",
}

rows, err := db.NamedQuery(query, args)

对复杂条件尤其是拼装查询时,命名参数往往比一串问号更不容易把自己看晕。

它和 gorm 最大的区别是什么

一句话:

  • gorm 更偏 ORM,强调模型和链式 API
  • sqlx 更偏 SQL 优先,强调“我自己写 SQL,但你帮我少点体力劳动”

这也是为什么很多有一定 SQL 控制欲的团队,会更偏爱 sqlx。

什么时候它特别适合你

  • 你愿意手写 SQL
  • 你想更清楚地知道数据库到底在执行什么
  • 你又不想每次都手动一个字段一个字段 Scan

它很适合那种“我要掌控感,但也不想回到石器时代”的项目风格。

它不替你做什么

sqlx 虽然顺手,但别误会它会替你自动做这些:

  • 模型迁移
  • 关联关系管理
  • 复杂 ORM 封装
  • 查询构造器魔法

也就是说,它没有想替你决定数据库开发风格,它只是帮你把低级重复劳动减掉。

小结

sqlx 是一口很适合工程派的菜:

  • 保留原生 SQL 的掌控感
  • 用结构体映射和命名参数减少体力劳动
  • 比 ORM 更透明,比原生 sql 更顺手
  • 特别适合不想把数据库逻辑完全交给 ORM 的团队

下一篇我们讲 ent。这道菜比 sqlx 和 gorm 都更偏“体系化”,喜欢它的人会很喜欢,不喜欢的人也会嫌它重。

Read more

Harness Engineering:从驾驭模型到构建 AI 工厂

Harness Engineering:从驾驭模型到构建 AI 工厂

2026 年,AI 编程工具的竞争焦点发生了根本性转变:决定 AI 助手好不好用的,不再是模型本身,而是包裹在模型外面的那层"Harness"。同一个模型,在不同的 Harness 下,性能差距可以达到 78% vs 42%。 这篇文章将带你深入了解 Harness Engineering——这个正在重新定义 AI 工程实践的新兴领域。 一、什么是 Harness Engineering? Harness 的字面意思是"马具/缰绳"——用来驾驭一匹强壮但不受控的马。在 AI 语境下,Harness 就是 LLM 之外的一切:工具定义、记忆系统、权限模型、反馈循环、文档规范、多

By Fuyu Jia

Claude Code CLI + Ralph:让 AI 自动完成大型编程任务的终极方案

TL;DR 当你的编程任务大到一个 AI 对话窗口装不下时,Ralph 会帮你把任务拆成小块,让 Claude Code CLI 一个接一个地自动完成——每轮都用全新的上下文窗口,不会越写越糊涂。 一、什么是 Ralph? Ralph 是一个开源项目(GitHub 16k+ Stars),基于 Geoffrey Huntley 提出的 "Ralph Pattern" 构建。它的核心理念很简单: 不要让 AI 在一个漫长的会话里做完所有事情,而是把大任务拆成小故事,每个故事用一个全新的 AI 实例来完成。 这解决了 AI 编程中最常见的痛点——上下文窗口耗尽。当对话越来越长,AI 的输出质量会明显下降。Ralph 通过「每轮一个新实例」的方式,

By Fuyu Jia