package reflect2 import ( "reflect" "unsafe" ) type safeField struct { reflect.StructField } func (field *safeField) Offset() uintptr { return field.StructField.Offset } func (field *safeField) Name() string { return field.StructField.Name } func (field *safeField) PkgPath() string { return field.StructField.PkgPath } func (field *safeField) Type() Type { panic("not implemented") } func (field *safeField) Tag() reflect.StructTag { return field.StructField.Tag } func (field *safeField) Index() []int { return field.StructField.Index } func (field *safeField) Anonymous() bool { return field.StructField.Anonymous } func (field *safeField) Set(obj interface{}, value interface{}) { val := reflect.ValueOf(obj).Elem() val.FieldByIndex(field.Index()).Set(reflect.ValueOf(value).Elem()) } func (field *safeField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) { panic("unsafe operation is not supported") } func (field *safeField) Get(obj interface{}) interface{} { val := reflect.ValueOf(obj).Elem().FieldByIndex(field.Index()) ptr := reflect.New(val.Type()) ptr.Elem().Set(val) return ptr.Interface() } func (field *safeField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer { panic("does not support unsafe operation") }