1 回答
TA贡献1869条经验 获得超4个赞
为了Assign工作,第二个参数必须是可寻址的,即您需要传递一个指向结构值的指针。
// the second argument MUST be a pointer to the struct
Assing(source, &target)
然后您需要稍微修改您的实现,Assign因为指针没有文件。您可以使用该Elem()方法获取指针指向的结构体值。
func Assign(sour interface{}, dist interface{}) uint {
counter := 0
source := reflect.ValueOf(sour)
// dist is expected to be a pointer, so use Elem() to
// get the type of the value to which the pointer points
target := reflect.ValueOf(dist).Elem()
typeSource := reflect.TypeOf(sour)
typeTarget := target.Type()
for i := 0; i < source.NumField(); i++ {
for j := 0; j < target.NumField(); j++ {
if typeSource.Field(i).Type == typeTarget.Field(j).Type && typeSource.Field(i).Name == typeTarget.Field(j).Name {
counter = counter + 1
target.FieldByName(typeSource.Field(i).Name).Set(source.Field(i))
}
}
}
return uint(counter)
}
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报