列舉幾個反射的例子:1)簡單型別反射,2)複雜型別反射,3)對反射回來的資料的可修改屬性
1、簡單型別反射
1.1)**
package mainimport (
"fmt""
reflect")
func main()
1.2)執行結果
$ go run reflect.gotype : float64
kind
is float64: true
value:
3.4
2、複雜型別反射
2.1)**
1package 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.go0: a int = 203
1: b string = mh203
3、通過反射獲得的變數的可設定屬性
3.1)**例項
1package 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...