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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM