反射reflect
struct
reflect.typeof(i inte***ce{})-->type
獲取結構體的字段的型別,欄位名
方法的型別,方法的名字
packagemainimport(
"fmt"
"reflect"
)typepersonstruct
func(p person)say(msg string)
func(p person)printinfo()
funcmain()
//1.第一部分:通過反射操作結構體中的字段:獲取欄位的型別,名稱,數值。。
//通過reflect包下的typeof(),獲取p1的型別
t1:=reflect.typeof(p1)
fmt.println(t1)
fmt.println(t1.name()) //person
fmt.println(t1.kind()) //struct
//通過reflect包下valueof(),獲取p1的值
v1:=reflect.valueof(p1) //
fmt.println(v1)
//詳細操作:判斷t1的種類是結構體型別
ift1.kind() == reflect.struct
}//2.通過反射,操作方法
fmt.println(t1.nummethod())
fori:=0
;i;i++
//執行方法
m1:=v1.methodbyname("printinfo")
m1.call(nil)//執行m1對應的printinfo()
m2:=v1.methodbyname("say")
m2.call(reflect.value) // string-->value
}
reflect.valueof(i inte***ce{})-->value
獲取結構體的字段的數值
獲取方法的物件--->call(),執行對應的方法
packagemainimport(
"reflect"
"fmt"
)typeanimalstruct
typecatstruct
funcmain() ,
"白色"}
t1 := reflect.typeof(c1)
fmt.println(t1.numfield())
fori := 0
; i < t1.numfield(); i++
//獲取匿名字段
/*匿名字段,可以通過下標獲取
fieldbyindex(int)-->animal
fieldbyindex(int)-->animal中的第乙個字段:name
*/f1:=t1.fieldbyindex(int)
fmt.println(f1.name,f1.type)//name string
f2:=t1.fieldbyindex(int)
fmt.println(f2.name,f2.type)
v1:=reflect.valueof(c1)
name:=v1.fieldbyindex(int)
fmt.println(name)
}
//匿名字段
t1.fieldbyindex(int)
v1.fieldbyindex(int)
//更改資料
reflect.valueof(p1)-->value
reflect.struct
reflect.valueof(&p1)-->value
reflect.ptr
v1 = v1.elem()
canset()-->bool
c1.fieldbyname()-->f1
f1.set***(新value)
packagemainimport(
"reflect"
"fmt"
)typestudentstruct
funcmain()
fmt.printf("%t\n"
,s1)
p1:=&s1
fmt.printf("%t\n"
,p1) //*main.student
fmt.println(s1.name)
fmt.println((*p1).name,p1.name)
v1:= reflect.valueof(&s1) // value
ifv1.kind()==reflect.ptr
f1:=v1.fieldbyname("name")
f1.setstring("王三狗")
f3:=v1.fieldbyname("school")
f3.setstring("藍翔學校")
fmt.println(s1)
}
GO語言學習 反射reflect
反射能在執行期探知物件的型別資訊和記憶體結構。也是實現元程式設計的重要手段。反射所需的全部資訊都源自介面變數。介面變數處儲存自身型別外,還會儲存實際物件的型別資料。將任何傳入的物件轉換為介面型別 func typeof i inte ce type func valueof i inte ce va...
Go中反射(reflect)的應用
package main import fmt reflect type monster struct 顯示s的值 func s monster print 返回兩個數的和 func s monster getsum n1,n2 int int 設定s結構體的在 func s monster set...
反射 reflect 及其應用
class 所有類的位元組碼檔案 class.forname 全類名 類名.class 例項.getclass field getdeclaredfield getdeclaredfields 修飾符 型別 名稱 method 獲取 getdeclaredmethod 引數型別的class.para...