package reflect2
import (
"reflect"
"unsafe"
)
type UnsafeStructType struct {
unsafeType
likePtr bool
}
func newUnsafeStructType(cfg *frozenConfig , type1 reflect .Type ) *UnsafeStructType {
return &UnsafeStructType {
unsafeType : *newUnsafeType (cfg , type1 ),
likePtr : likePtrType (type1 ),
}
}
func (type2 *UnsafeStructType ) LikePtr () bool {
return type2 .likePtr
}
func (type2 *UnsafeStructType ) Indirect (obj interface {}) interface {} {
objEFace := unpackEFace (obj )
assertType ("Type.Indirect argument 1" , type2 .ptrRType , objEFace .rtype )
return type2 .UnsafeIndirect (objEFace .data )
}
func (type2 *UnsafeStructType ) UnsafeIndirect (ptr unsafe .Pointer ) interface {} {
if type2 .likePtr {
return packEFace (type2 .rtype , *(*unsafe .Pointer )(ptr ))
}
return packEFace (type2 .rtype , ptr )
}
func (type2 *UnsafeStructType ) FieldByName (name string ) StructField {
structField , found := type2 .Type .FieldByName (name )
if !found {
return nil
}
return newUnsafeStructField (type2 , structField )
}
func (type2 *UnsafeStructType ) Field (i int ) StructField {
return newUnsafeStructField (type2 , type2 .Type .Field (i ))
}
func (type2 *UnsafeStructType ) FieldByIndex (index []int ) StructField {
return newUnsafeStructField (type2 , type2 .Type .FieldByIndex (index ))
}
func (type2 *UnsafeStructType ) FieldByNameFunc (match func (string ) bool ) StructField {
structField , found := type2 .Type .FieldByNameFunc (match )
if !found {
panic ("field match condition not found in " + type2 .Type .String ())
}
return newUnsafeStructField (type2 , structField )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .