12345678910111213141516171819202122232425262728293031323334353637 |
- 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
- }
|