zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    python中创建函数和调用函数
    python中函数的参数
    python 函数中的关键字参数
    python中创建集合
    python中函数文档
    python中函数形式参数、实际参数、位置参数、关键字参数
    python中不可变集合
    我是谁?(程序员版)
    《林阴小路》疏辨
    用户接口常用术语英语德语对照
  • 原文地址:https://www.cnblogs.com/zhepama/p/3017204.html
Copyright © 2011-2022 走看看