golang的反射-Value
value.go中的函数
- func Append(s Value, x ...Value) Value
- func AppendSlice(s, t Value) Value
- func Indirect(v Value) Value
- func MakeChan(typ Type, buffer int) Value
- func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value
- func MakeMap(typ Type) Value
- func MakeSlice(typ Type, len, cap int) Value
- func New(typ Type) Value
- func NewAt(typ Type, p unsafe.Pointer) Value
- func ValueOf(i interface{}) Value
- func Zero(typ Type) Value
value结构的方法
- Addr() Value
- 通常用于获取一个指向结构体字段或slice元素为了调用一个方法,需要一个指针接收机。
- Bool() bool
- 返回底层的值,如果v的kind不是bool则会产生恐慌
- Bytes() []byte
- 返回底层的值,如果v的底层值不是一个字节切片,则会产生恐慌
b := []byte{'a', 'b'} fmt.Println(reflect.ValueOf(b).Bytes())
- CanAddr() bool
- 检查v是否是可寻址的
- CanSet() bool
- 检查值是否可被设置,只有可寻址的才能被设置
b := 555 p:=reflect.ValueOf(&b) v := p.Elem() //反射对象 p并不是可寻址的,但是并不希望设置p,(实际上)是 *p。为了获得 p 指向的内容,调用值上的 Elem 方法,从指针间接指向,然后保存反射值的结果叫做 v v.SetInt(666) fmt.Println(b)
- Call(in []Value) []Value
- 反射函数的值.并调用
func test(a string) string { return a } func main() { a := "sssssss" args := []reflect.Value{reflect.ValueOf(a)} c := reflect.ValueOf(test).Call(args) fmt.Println(c) }
- CallSlice(in []Value) []Value
- 同上
- Close()
- 关闭channel,如果不是chan则产生恐慌
- Complex() complex128
- 返回底层的值,如果值不是一个复数,则产生一个恐慌
- Elem() Value
- 返回v包含的值,多被用于设置值时的寻址操作
- Field(i int) Value
- 返回结构中索引字段的Value
type A struct { a int b byte c string } func main() { a := A{} fmt.Println(reflect.ValueOf(a).Field(0).Int()) }
- FieldByIndex(index []int) Value
- 同上不过.提供的是一个切片
- FieldByName(name string) Value
- 通过字段名查找
- FieldByNameFunc(match func(string) bool) Value
- 通过函数名查找
- Float() float64
- 返回底层的值,如果值不是一个float,则产生一个恐慌
- Index(i int) Value
- 如果kind不是array或者sliece则差生恐慌,将其中的元素返回为Value
- Int() int64
- 返回底层的值,如果值不是一个int,则产生一个恐慌
- CanInterface() bool
- 如果接口能被使用,则返回true
- Interface() (i interface{})
- 返回V作为interface{}的当前值
- InterfaceData() [2]uintptr
- 如果kind不是一个接口则会产生恐慌
- IsNil() bool
- 如果v是一个nil,则返回true
- IsValid() bool
- 如果v代表一个值,则返回true
- Kind() Kind
- 返回v的种类
- Len() int
- 返回v的长度
- MapIndex(key Value) Value
- 如果是一个map,根据key反射其键值的Value
- MapKeys() []Value
- 返回map的所有key
- Method(i int) Value
- 按索引反射结构某个方法的值
- NumMethod() int
- 统计结构方法数量
- MethodByName(name string) Value
- 反射方法的值根据方法名
- NumField() int
- 反射一个结构的字段数
- OverflowComplex(x complex128) bool
- 覆盖复数
- OverflowFloat(x float64) bool
- 覆盖浮点数
- overflowFloat32(x float64) bool
- OverflowInt(x int64) bool
- OverflowUint(x uint64) bool
- Pointer() uintptr
- 反射一个指针的值.返回一个指针的整型值
- Recv() (x Value, ok bool)
- 用于channel
- Send(x Value)
- 用于channel
- Set(x Value)
- 如果v可设置,则设置一个v的值
- SetBool(x bool)
- 如果v可设置,且是bool,则设置一个v的值
- SetBytes(x []byte)
- SetComplex(x complex128)
- SetFloat(x float64)
- SetInt(x int64)
- SetLen(n int)
- SetMapIndex(key, val Value)
- SetUint(x uint64)
- SetPointer(x unsafe.Pointer)
- SetString(x string)
- Slice(beg, end int) Value
- 如果底层是slice.则返回值.
- String() string
- 如果狄成是字符窜.则返回字符窜
- TryRecv() (x Value, ok bool)
- 用于channel,接受
- TrySend(x Value) bool
- 用于channel,发送
- Type() Type
- 返回type
- Uint() uint64
- 如果狄成是Uint.则返回uint
- UnsafeAddr() uintptr
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。