mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
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") |
|
}
|
|
|