golang的反射-Value

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.