41 lines
677 B
Go
41 lines
677 B
Go
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"fmt"
|
|
"reflect"
|
|
)
|
|
|
|
// Clone deep-clones src object to dst object
|
|
func Clone(src, dst any) error {
|
|
var buf bytes.Buffer
|
|
|
|
if err := gob.NewEncoder(&buf).Encode(src); err != nil {
|
|
return err
|
|
}
|
|
|
|
err := gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// PrintObjectFields prints all fields in specified object
|
|
func PrintObjectFields(obj any) {
|
|
if obj == nil {
|
|
return
|
|
}
|
|
|
|
elem := reflect.ValueOf(obj).Elem()
|
|
typ := elem.Type()
|
|
|
|
for i := 0; i < elem.NumField(); i++ {
|
|
field := elem.Field(i)
|
|
fmt.Printf("[%s] %v\n", typ.Field(i).Name, field.Interface())
|
|
}
|
|
}
|