package copier import "reflect" func (c *copier) lookupAndCopyWithConverter(dst, src reflect.Value, fieldName string) (bool, error) { if cnv, ok := c.opt.convertByName[fieldName]; ok { return convert(dst, src, cnv) } if len(c.opt.converters) > 0 { pair := converterPair{ SrcType: src.Type(), DstType: dst.Type(), } if cnv, ok := c.opt.converters[pair]; ok { return convert(dst, src, cnv) } } return false, nil } func convert(dst, src reflect.Value, fn convertFunc) (bool, error) { result, err := fn(src.Interface()) if err != nil { return false, err } if result != nil { dst.Set(reflect.ValueOf(result)) } else { dst.Set(reflect.Zero(dst.Type())) } return true, nil }