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