尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
gorm update结构体值false未修改  有select指定字段
这是一个经典的 GORM 更新陷阱。让我帮你分析这个问题并提供解决方案。问题原因GORM 的 Update / Updates 方法使用结构体时会忽略零值zero value字段。false 是 bool 类型的零值所以 GORM 默认不会将其写入数据库。当你使用 Select 指定字段时如果字段值是零值GORM 仍然可能跳过它。解决方案方案 1使用指针类型推荐将结构体字段定义为指针类型这样 nil 才是零值false 是有效值type User struct {ID uintIsAdmin *bool // 使用指针Name string}func UpdateUser(db *gorm.DB, id uint, isAdmin bool) error {return db.Model(User{ID: id}).Select(is_admin).Updates(User{IsAdmin: isAdmin, // 传递指针false 会被正确更新}).Error}方案 2使用 Map 更新db.Model(User{ID: 1}).Select(is_admin).Updates(map[string]interface{}{is_admin: false, // Map 中的值不会被忽略})方案 3使用 Update 单字段db.Model(User{ID: 1}).Update(is_admin, false)方案 4使用 UpdateColumn跳过 Hookdb.Model(User{ID: 1}).UpdateColumn(is_admin, false)关于 Select 的注意事项Select 指定字段时GORM 的行为是// ❌ 这样写即使 Select 了false 仍可能被忽略db.Model(user).Select(is_admin).Updates(User{IsAdmin: false})// ✅ 正确写法 1使用指针db.Model(user).Select(is_admin).Updates(User{IsAdmin: falseValue})// ✅ 正确写法 2使用 MapSelect 在这里其实多余但可以用db.Model(user).Select(is_admin).Updates(map[string]interface{}{is_admin: false})最佳实践建议场景 推荐方案结构体中 bool 字段需要更新 false 指针类型 (*bool)临时/一次性更新 Map单字段更新 Update(field, value)批量更新且字段多 Map Select完整示例package mainimport (gorm.io/gorm)type User struct {ID uintName stringIsAdmin *bool gorm:default:falseStatus int}func main() {// 假设 db 已初始化falseVal : falsetrueVal : true// 更新为 false有效db.Model(User{ID: 1}).Select(is_admin).Updates(User{IsAdmin: falseVal,})// 更新为 true有效db.Model(User{ID: 1}).Select(is_admin).Updates(User{IsAdmin: trueVal,})// 或者直接用 Mapdb.Model(User{ID: 1}).Select(is_admin).Updates(map[string]interface{}{is_admin: false,})}核心要点GORM 的结构体更新会跳过零值字段这是设计上的权衡防止误更新未设置的字段。需要更新零值时使用 指针类型 或 Map 是最可靠的方案。
RELATED

相关推荐

GLM5.2本地部署实战:vLLM与llama.cpp方案详解,性能超越官方API

GLM5.2本地部署实战:vLLM与llama.cpp方案详解,性能超越官方API

这次我们来看一个关于 GLM5.2 本地自部署的项目。GLM5.2 是智谱 AI 发布的最新开源大语言模型,以其强大的推理和代码能力受到关注。但很多开发者关心的不是模型本身有多强,而是它能不能在自己的机器上跑起来、速度如何、以及相比官方 API 有没有优势。这…

📅 2026/10/4 10:05:41
基于微积分思维的数学分析教学

基于微积分思维的数学分析教学

注:本文为 “基于微积分思维的数学分析教学” 相关译文,机翻未校。 略作重排,如有内容异常,请看原文。 基于微积分思维的数学分析教学 Teaching of Mathematical Analysis or Calculus Based on the Thinking of Calculus 收录于…

📅 2026/10/2 20:58:53
Linux Page Cache 导致视频解码第一次慢、第二次快的原因分析与缓存清理方法

Linux Page Cache 导致视频解码第一次慢、第二次快的原因分析与缓存清理方法

本人工作中遇到的实际问题,结合大模型分析后找到了原因 本文在CHATGPT帮助下完成1. 问题背景 在使用 PyNvVideoCodec 做 GPU 视频解码测试时,发现一个非常奇怪的现象: 同一个视频: 第一次运行: PyNvVideoCodec decode:…

📅 2026/10/4 2:30:51
MORE NEWS

更多资讯

📰

Allegro导入立创EDA全流程:IPC-2581转换与DRC重建指南

从 Allegro 转战立创 EDA,这事听起来简单,真正做起来能让人挠掉不少头发。前阵子刚把一块四层板从 Allegro 完整搬到立创 EDA 专业版,中间踩过的坑、摸索出来的流程,值得好好记录。这篇就是我的第二篇 EDA 学习日记,专…

📰

配电网可靠性评估:基于序贯蒙特卡洛的Matlab实现

做配电网可靠性评估的同行,应该都有过这种纠结:手头有故障率、修复时间这些基础参数,想算一算系统全年平均停电多少小时、频率是多少,却总在“用什么方法算”这一步卡住。公式推导不难,难的是让模型贴近实际运行状态—…

📰

COMSOL激光熔池模拟:水平集方法耦合多物理场的关键细节

做激光成形、激光焊接或者增材制造的工程师,大概率都遇到过这种尴尬:实验参数窗口窄得可怜,功率大了熔池飞溅,功率小了又熔不透;想调工艺,只能靠炉前试错,一件料废掉就是几千块。更麻烦的是&…

📰

AI开发工程师晋升指南:从技术牛到被看见的四个关键能力

1. 先承认一个扎心的事实:干活最猛的,往往不是晋升最快的做 AI 开发这三年,我见过太多人把"技术牛"等同于"该晋升",我自己也曾经在这个认知里卡了整整一年。当时我接手了一个模型推理性能优化的项目&#xff…

📰

低空经济通信协议安全:模糊测试实战指南

做通信协议安全这么多年,我越来越觉得“低空经济”这四个字背后的技术含量被严重低估了。很多人聊低空经济,聊的是飞行器续航、载重、适航认证,但真正让无人机、eVTOL、城市物流机队能同时在天上飞、还不互相撞上的,是一套看不见摸…

📰

反激变压器设计核心:电感量、磁芯与气隙计算全解析

1. 反激变压器设计的第一道关卡:先把需求翻译成电学参数 做反激变压器设计这事,我踩过最大的坑不是公式算错,而是拿到一个“大概的需求”就急着套公式。比如老板说“做一个5V 2A的手机充电器”,如果你就这么开始算,后面…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬