反射修改结构体字段
概念说明
修改结构体字段时,需要传入结构体指针。
然后通过 Elem() 获取结构体本身,再通过 FieldByName 找到字段。
只有可导出的字段才能被反射安全修改。
未导出字段即使找得到,也通常不能直接设置。
语法/规则
- 使用
reflect.ValueOf(&structValue).Elem()获取可设置结构体值。 - 使用
FieldByName("字段名")查找字段。 - 修改前检查
field.IsValid()和field.CanSet()。 - 根据字段类型选择对应的
Set方法。 - 字段名必须是结构体中的真实字段名,不是 json tag 名。
修改结构体字段示例
| |
输出结果:
| |
常见错误
- 传入结构体值而不是结构体指针,导致字段不可设置。
- 使用 json tag 名查找字段,例如用
name查找Name,结果找不到。 - 修改未导出字段,导致
CanSet()为 false。 - 字段类型不匹配时仍强行
Set,会触发 panic。