type A struct {
One string
Two int
}
type B struct {
One string
Two int
}
func CopyStruct(src, dst interface{}) error {
sval := reflect.ValueOf(src).Elem()
dval := reflect.ValueOf(dst).Elem()
for i := 0; i < sval.NumField(); i++ {
val := sval.Field(i)
name := sval.Type().Field(i).Name
dvalue := dval.FieldByName(name)
if dvalue.IsValid() == false {
return errors.New("field cannot find")
}
dvalue.Set(val)
}
return nil
}
func main() {
a := &A{}
a.One = "hello"
a.Two = 2
b := New(B)
if err := CopyStruct(a, b); err != nil {
fmt.Println(err)
return
}
resB := *b
fmt.Println(resB)
}
golang 反射实现结构体copy
于 2022-03-18 11:48:12 首次发布
该博客探讨了Go语言中使用反射(reflect)库进行结构体(struct)复制的方法。通过示例代码展示了如何创建一个函数CopyStruct,实现从一个源结构体到目标结构体的字段值复制。在main函数中,定义了类型A和B的结构体实例,并成功调用CopyStruct实现了A到B的值复制,输出了复制后的结果。
90

被折叠的 条评论
为什么被折叠?



