news 2026/4/2 12:01:11

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/4/3 2:52:43

5分钟精通仿宋GB2312:从安装到专业应用全攻略

还在为公文格式不规范而烦恼?仿宋GB2312作为国内官方文档的标配字体,掌握它的正确安装和使用方法,能让你的文档瞬间提升专业度。本教程将带你从零开始,全面掌握这款经典字体的安装技巧和应用场景。 【免费下载链接】仿宋GB2312字体…

作者头像 李华
网站建设 2026/4/1 6:59:58

OpCore Simplify:新手3分钟搞定OpenCore EFI配置的完整指南

OpCore Simplify:新手3分钟搞定OpenCore EFI配置的完整指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的Hackintosh配置而…

作者头像 李华
网站建设 2026/4/1 0:05:52

OpCore Simplify:告别复杂配置的EFI自动化革命

OpCore Simplify:告别复杂配置的EFI自动化革命 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置的繁琐步骤而头疼吗&#…

作者头像 李华
网站建设 2026/4/2 12:12:59

模型剪枝实战:TensorFlow Pruning API详细教程

模型剪枝实战:TensorFlow Pruning API 优化之路 在移动端模型部署的日常中,我们常常面临这样的尴尬:训练好的模型准确率很高,但一放到手机或嵌入式设备上就“跑不动”——内存爆了、推理慢得像卡顿视频、功耗飙升。这背后的核心矛…

作者头像 李华
网站建设 2026/3/26 16:20:30

打造惊艳3D抽奖体验:企业活动互动升级终极指南

还在为年会抽奖环节缺乏新意而烦恼吗?传统的抽奖方式已经无法满足现代企业对于科技感和互动性的需求。现在,通过log-lottery 3D动态抽奖系统,你可以在几分钟内轻松打造出令人难忘的互动体验! 【免费下载链接】log-lottery &#x…

作者头像 李华
网站建设 2026/3/30 16:59:32

按需付费新模式:按Token计费的TensorFlow推理服务架构

按需付费新模式:按Token计费的TensorFlow推理服务架构 在AI模型日益渗透企业核心业务的今天,一个现实问题正不断浮现:如何让每一次推理都“物有所值”?许多团队曾经历过这样的窘境——为了应对偶尔的流量高峰,不得不长…

作者头像 李华