package assign import ( "git.sxidc.com/go-tools/utils/reflectutils" "github.com/pkg/errors" "reflect" ) type OnParsedFieldTagCallback func(fromFieldName string, fromFieldElemValue reflect.Value, toFieldElementValue reflect.Value, tag *Tag) error func UseTag(from any, to any, onParsedFieldTagFunc OnParsedFieldTagCallback) error { if from == nil || to == nil { return nil } fromValue := reflect.ValueOf(from) toValue := reflect.ValueOf(to) // 类型校验 if !reflectutils.IsValueStructOrStructPointer(fromValue) { return errors.New("参数不是结构或结构指针") } if !reflectutils.IsValueStructPointer(toValue) { return errors.New("返回类型不是结构指针") } fromElemValue := reflectutils.PointerValueElem(fromValue) toElemValue := reflectutils.PointerValueElem(toValue) err := parseTag(fromElemValue, &toElemValue, onParsedFieldTagFunc) if err != nil { return err } return nil }