您的位置:首页 > 产品设计 > UI/UE

golang的反射-Value

2013-04-12 19:05 183 查看

value.go中的函数

func Append(s Value, x ...Value) Valuefunc AppendSlice(s, t Value) Valuefunc Indirect(v Value) Valuefunc MakeChan(typ Type, buffer int) Valuefunc MakeFunc(typ Type, fn func(args []Value) (results []Value)) Valuefunc MakeMap(typ Type) Valuefunc MakeSlice(typ Type, len, cap int) Valuefunc New(typ Type) Valuefunc NewAt(typ Type, p unsafe.Pointer) Valuefunc ValueOf(i interface{}) Valuefunc 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则差生恐慌,将其中的元素返回为ValueInt() int64返回底层的值,如果值不是一个int,则产生一个恐慌CanInterface() bool如果接口能被使用,则返回trueInterface() (i interface{})返回V作为interface{}的当前值InterfaceData() [2]uintptr如果kind不是一个接口则会产生恐慌IsNil() bool如果v是一个nil,则返回trueIsValid() bool如果v代表一个值,则返回trueKind() Kind返回v的种类Len() int返回v的长度MapIndex(key Value) Value如果是一个map,根据key反射其键值的ValueMapKeys() []Value返回map的所有keyMethod(i int) Value按索引反射结构某个方法的值NumMethod() int统计结构方法数量MethodByName(name string) Value反射方法的值根据方法名NumField() int反射一个结构的字段数OverflowComplex(x complex128) bool覆盖复数OverflowFloat(x float64) bool覆盖浮点数overflowFloat32(x float64) boolOverflowInt(x int64) boolOverflowUint(x uint64) boolPointer() uintptr反射一个指针的值.返回一个指针的整型值Recv() (x Value, ok bool)用于channelSend(x Value)用于channelSet(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返回typeUint() uint64如果狄成是Uint.则返回uintUnsafeAddr() uintptr
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: