gorm  updates select GORM 的 Updates 和 Select 是两个常用的更新相关方法但用途不同Updates — 批量更新字段用于更新多个字段接受 struct 或 map// 1. 用 struct 更新只会更新非零值字段db.Model(user).Updates(User{Name: hello, Age: 18})// UPDATE users SET namehello, age18 WHERE id 1;// 2. 用 map 更新可以更新零值更灵活db.Model(user).Updates(map[string]interface{}{name: hello, age: 0})// UPDATE users SET namehello, age0 WHERE id 1;⚠️ struct 的坑零值字段0, , false会被忽略不会更新到数据库。---Select — 指定/排除更新字段Select 常与 Updates 链式配合精确控制哪些字段参与更新// 只更新 name 字段忽略其他db.Model(user).Select(name).Updates(map[string]interface{}{name: new_name,age: 20, // 会被忽略})// UPDATE users SET namenew_name WHERE id 1;// 排除某些字段更新其余所有db.Model(user).Omit(name).Updates(map[string]interface{}{name: new_name, // 被忽略age: 20, // 会更新})// UPDATE users SET age20 WHERE id 1;---组合使用场景场景 写法强制更新零值字段 Select(age).Updates(User{Age: 0})批量更新指定列 Select(name, age).Updates(...)忽略敏感字段如密码 Omit(password).Updates(...)根据 map 动态更新 Select(status).Updates(map[string]any{status: 2})---关键区别方法 作用Updates 执行更新决定更新哪些值Select 筛选字段决定哪些列参与 SQL简单说Select 是过滤器Updates 是执行器。两者常一起用但 Select 也可用于查询db.Select(name, age).Find(users)含义不同。