news 2026/2/25 10:18:42

go gorm expr

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go gorm expr

`gorm.Expr` 相当于在 GORM 里开一个“原生 SQL 小窗口”,用来写任意(带占位符的)SQL 表达式,让数据库自己去计算,而不是先查出来再在 Go 代码里算完再写回去。典型用途分三类:

1. 原子更新(避免并发读-改-写)

```go
// 库存 -1
db.Model(&Product{}).
Where("id = ? AND stock > 0", pid).
Update("stock", gorm.Expr("stock - ?", 1))

// 乐观锁版本号 +1
db.Model(&User{ID: 1}).Update("lock_version", gorm.Expr("lock_version + 1"))
```

2. 把表达式当“值”用在 Upsert / Returning 里

```go
// upsert 时只在价格真正变化才更新,并返回被影响的行
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "sku"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"price": gorm.Expr("GREATEST(price, VALUES(price))"),
}),
}, clause.Returning{}).Create(&products)
```

3. 复杂 WHERE / ORDER 子句

```go
// 按 FIELD 顺序排序
db.Clauses(clause.OrderBy{
Expression: clause.Expr{
SQL: "FIELD(id, ?)",
Vars: []interface{}{[]int{3, 1, 2}},
WithoutParentheses: true,
},
}).Find(&users)

// jsonb 嵌套字段更新
db.Model(&Quiz{}).Where("id = ?", 1).
Update("answers", gorm.Expr(`jsonb_set(answers, '{multi,"lOjNn9qfJgEGLBIxxe0ka"}', '["B","D"]'::jsonb, true)`))
```

要点小结
- 任何带 `?` 占位符的片段都能传参,防止 SQL 注入 。
- 更新零值、表达式、函数调用时优先用 `gorm.Expr`,否则结构体/Map 会忽略零值 。
- 可嵌进 `clause.Expr{SQL: "...", Vars: ...}` 里,与 GORM 的 Clause 体系无缝衔接 。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 11:58:12

OpCore Simplify深度排解指南:从紧急修复到性能优化的完整技术方案

OpCore Simplify作为自动化OpenCore EFI配置工具,通过智能硬件识别和配置生成,大幅简化了Hackintosh系统的部署流程。本指南针对中级技术用户在实际操作中遇到的核心技术难题,提供系统性的诊断与修复方案。 【免费下载链接】OpCore-Simplify …

作者头像 李华
网站建设 2026/2/14 13:46:30

企业年会3D球体抽奖解决方案:从策划到执行完整指南

企业年会3D球体抽奖解决方案:从策划到执行完整指南 【免费下载链接】log-lottery 🎈🎈🎈🎈年会抽奖程序,threejsvue3 3D球体动态抽奖应用。 项目地址: https://gitcode.com/gh_mirrors/lo/log-lottery …

作者头像 李华
网站建设 2026/2/24 16:12:04

OpCore Simplify:3步搞定黑苹果EFI配置的智能方案

OpCore Simplify:3步搞定黑苹果EFI配置的智能方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经为了配置黑苹果EFI而熬夜研究…

作者头像 李华
网站建设 2026/2/24 0:42:43

Intel平台eSPI带宽优化策略:实战案例

eSPI带宽为何卡脖子?一个工业网关的实战调优全记录你有没有遇到过这样的情况:明明用的是最新的Intel Jasper Lake平台,系统却在开机自检(POST)时“卡”上好几秒?BIOS读得慢、EC响应迟钝、带外管理偶尔掉线……

作者头像 李华
网站建设 2026/2/25 8:23:07

餐厅点餐|基于springboot + vue餐厅点餐系统(源码+数据库+文档)

餐厅点餐 目录 基于springboot vue餐厅点餐系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue餐厅点餐系统 一、前言 博主介绍:✌️大…

作者头像 李华