GO語言練習 反射

2021-09-08 22:19:42 字數 1178 閱讀 1094

列舉幾個反射的例子:1)簡單型別反射,2)複雜型別反射,3)對反射回來的資料的可修改屬性

1、簡單型別反射

1.1)**

package main

import (

"fmt""

reflect")

func main()

1.2)執行結果

$ go run reflect.go 

type : float64

kind

is float64: true

value:

3.4

2、複雜型別反射

2.1)**

1

package main23

import (4"

fmt"5"

reflect"6

)78 type t struct

1213

func main ()

15 s := reflect.valueof(&t).elem()

16 typeoft :=s.type()

17for i := 0; i < s.numfield(); i++

22 }

2.2)執行結果

$ go run structreflect.go 

0: a int = 203

1: b string = mh203

3、通過反射獲得的變數的可設定屬性

3.1)**例項

1

package main23

import (4"

fmt"5"

reflect"6

)78func testa() else17}

1819

func testb()

3233

func main()

3.2)執行結果

$ go run set

.go

v is

not setable

type of p: *float64

settablitty of p :

false

settablitty of v:

true

7.17.1

Go語言反射

反射是指在程式執行過程中對程式本身進行訪問和修改的能力。程式在編譯時,變數被轉換為記憶體位址,變數名不會被編譯器寫入到可執行部分。在執行程式時,程式無法獲取自身資訊。支援反射的語言可以在程式編譯期將變數的反射資訊,如欄位名稱 型別資訊 結構體資訊等整合到可執行檔案中,並給程式提供介面的訪問反射資訊,...

Go語言反射之值反射

反射不僅可以獲取值的型別資訊,還可操作變數的值。使用reflect.value型別操作變數的值。v make int,10 valuev reflect.valueof v fmt.println valuev.isvalid true fmt.println valuev.isnil false ...

Go語言反射3

任意值通過 reflect.typeof 獲得反射物件資訊後,如果他的型別是結構體,可以通過反射值物件 reflect.type 的numfield 和field 方法獲得結構體成員的詳細方法。reflect.type 中與獲取結構體成員相關的方法如下表所示 方法說明 field i int str...