特定场景无法匹配到TypeConverter
Closed this issue · 0 comments
smzgl commented
copier 在特定场景无法匹配到TypeConverter, 如下面四种场景, 实际上仅有一个能匹配到.
type A struct {
A int
}
type B struct {
A int
b int
}
func Test_A(t *testing.T) {
opt := copier.Option{
Converters: []copier.TypeConverter{
{
SrcType: A{},
DstType: B{},
Fn: func(from interface{}) (interface{}, error) {
fmt.Print("match TypeConverter ")
return nil, nil
},
},
},
}
{
aa := A{A: 10}
bb := B{A: 10, b: 100}
t.Logf("err: %v", copier.CopyWithOption(&bb, &aa, opt))
}
{
aa := map[string]*A{
"a": &A{A: 10},
}
bb := map[string]*B{
"a": &B{A: 10, b: 100},
}
t.Logf("err: %v", copier.CopyWithOption(&bb, &aa, opt))
}
{
aa := []*A{
&A{A: 10},
}
bb := []*B{
&B{A: 10, b: 100},
}
t.Logf("err: %v", copier.CopyWithOption(&bb, &aa, opt))
// b := B{A: 10, b: 100}
// dst2 := []*B{&b}
// t.Logf("copy a->*b err: %v, b: %+v", copier.CopyWithOption(&dst2, []*A{&a}, opt), b)
}
{
aa := struct {
A []*A
}{
A: []*A{&A{A: 10}},
}
bb := struct {
A []*B
}{
A: []*B{&B{A: 10, b: 100}},
}
t.Logf("err: %v", copier.CopyWithOption(&bb, &aa, opt))
// b := B{A: 10, b: 100}
// dst2 := []*B{&b}
// t.Logf("copy a->*b err: %v, b: %+v", copier.CopyWithOption(&dst2, []*A{&a}, opt), b)
}
}