這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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 := 555p:=reflect.ValueOf(&b)v := p.Elem() //反射對象 p並不是可定址的,但是並不希望設定p,(實際上)是 *p。為了獲得 p 指向的內容,調用值上的 Elem 方法,從指標間接指向,然後儲存反射值的結果叫做 vv.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 intb bytec 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