golang的反射-Value

zhepama · · 4982 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:zhepama

查看原文:golang的反射-Value

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4982 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传