Documentation
¶
Index ¶
- func GetStringFromObj(obj interface{}) (keyString string)
- func SetUpdateValue(originObjPtr, updateInfoObjPtr interface{}) (changed bool, originMap, changedMap map[string]interface{})
- func SetUpdateValueWithOption(originObjPtr, updateInfoObjPtr interface{}, option *SetUpdateValueOption) (changed bool, originMap, changedMap map[string]interface{}, err error)
- type SetUpdateValueOption
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetStringFromObj ¶
func GetStringFromObj(obj interface{}) (keyString string)
GetStringFromObj obj为结构体实例 与test_tool中的GetSubTestName类似 返回值格式:keyName_keyValueString_keyName_keyValueString
func SetUpdateValue ¶
func SetUpdateValue(originObjPtr, updateInfoObjPtr interface{}) (changed bool, originMap, changedMap map[string]interface{})
SetUpdateValue 将updateInfoObj这个结构体实例中的各项更新至originObj中各同名项中。 1. updateInfoObj 中的各项如果不是零值,且与originObj中的对应项值不同,才会更新至originObj 2. originObjPtr 是 originObj的指针;updateInfoObjPtr 是 updateInfoObj的指针 updateInfoObj中的各项如果不是zero value,则将originObj中同名的项的值更新 ! 注意:如果updateInfoObj中有些项刻意置为零值,在这里不会改变,需要额外单独赋值给originObj相应的项。例如,将state置为0,或将某字段置空“” changed: 表示原始值与info中有不同的值 originMap: 如果changed == true,orginMap中列出变动前的项和原始值 changedMap: 如果changed == true,changedMap中列出后的项和值 deprecated, 建议使用SetUpdateValueWithOption
func SetUpdateValueWithOption ¶ added in v1.0.19
func SetUpdateValueWithOption(originObjPtr, updateInfoObjPtr interface{}, option *SetUpdateValueOption) (changed bool, originMap, changedMap map[string]interface{}, err error)
SetUpdateValueWithOption 将updateInfoObj的值更新到originObj中。 - originObjPtr: 原始对象的指针。 - updateInfoObjPtr: 更新信息的对象指针。 - option: 更新选项。 返回值: - changed: 是否有任何字段被更新。 - originMap: 记录被更新字段的原始值。 - changedMap: 记录被更新字段的更新值。 originObj 和 updateInfoObj 可能是两个不同的struct的instance。这两个struct的field名称可能相同,只有updateInfoObj中的field名称在originObj中存在时,才将会被更新。 允许处理字段类型不一致(值与指针互转)的场景,并根据 CanSetNil 决定是否更新空指针。 场景1: 例如originObj中可能有个Age int, updateInfoObj中可能有Age *int,那么如果后者不是nil,则将后者指针指向的值更新到前者。如果后者是nil,则无值,无论是否设置CanSetNil,都不会将前者设为零值。 场景2: 如果originObj中Age *int, updateInfoObj中Age int,则将后者的值更新至前者。 场景3: 如果orginObj中Age *int, updateInfoObj中 Age *int,则后者的Age指针根据CanSetNil的设置情况决定是否更新到originObj的Age 如果CanSetNil为false,updateInfoObj中的各项目的值除了nil以外都将更新至originObj,nil以外的零值也更新; 如果CanSetNil为true,updateInfoObj中的各项目的值包括nil和其他类型的零值都将更新至originObj ! 所以,将此function用于go-gin bind query或bind json时,将updateInfo struct中的可能会出现零值的field用指针表示,并设置CanSetNil=false,这样能防止未提供的更新项被误更新为零值
Types ¶
type SetUpdateValueOption ¶ added in v1.0.19
type SetUpdateValueOption struct { // 是否将空指针(nil)更新到originObj中 CanSetNil bool }