反射在結構體中的應用,才是最廣泛的!畢竟在go中,是用結構體代替物件的!
所以最多的,最麻煩的,也是反射結構體,也是最靈活的!
上次講的,只是在普通變數中的應用,相對來說,使用的場景不是太多。
但是反射在結構體中的應用,基本會貫穿整個go語言基礎。
示例**
type student struct
func
main()
, }var t = reflect.
typeof
(s1)
fmt.
println
(t.name()
)//student
fmt.
println
(t.kind()
)//struct
fmt.
println
(t.numfield()
)//結果:4,表示多少個字段
}
上述的**只能用的是typeof
,只能返回型別等資訊,相對來說不是太智慧型,valueof
可以獲取值,同樣也能獲取型別,相對來說比typeof
好一點。
示例**
上述我們反射的都是值,有沒有反射是否可以反射函式,並且呼叫函式呢??
type student struct
//無參方法
func
(this student)
say(
)//有引數方法
//通過反射呼叫函式
//呼叫jump函式
//反射呼叫函式必須傳乙個引數,不管有沒有形參都要傳
//var args = reflect.value{}
"say").call(args)
//如果需要傳引數
//引數需要用reflect.valueof(1) 強轉一下
var args =
reflect.value
v.methodbyname
("jump").
call
(args)
}
**注:**注意第14行和20行**區別,如果要傳引數,參考第20行**。
在平常開發中,盡量慎用反射,原因如下。
上述我們主要講述了go反射結構體的相關知識,包括有
到此為止反射就講完了,一定要多嘗試,多敲敲**,反射的用法還有很多。
我是碼農星期八,如果覺得還不錯,記得動手點讚一下哈。
感謝你的**。
go語言基礎 匿名結構體
結構體和函式一樣,也可以使用匿名結構體 使用匿名結構體也要直接賦值給變數,不要沒法使用 匿名結構體和匿名字段 沒有名字的結構體 a struct func type a struct b a b.string,b.int 匿名字段可以理解為欄位名和字段型別一致 packagemain import ...
go語言基礎 結構體巢狀
go語言當中的聚合和繼承都是模擬出來的,子類是可以使用父類裡的字段或功能 結構體的巢狀 type a struct type b struct type c struct b b b.a.name,c c b.name,packagemain import fmt typeperson5struct...
go語言基礎之結構體比較和賦值
1 結構體比較和賦值 同型別的結構體可以相互賦值 示例 package main 必須有個main包 import fmt 定義乙個結構體型別 type student struct func main s2 student s3 student fmt.println s1 s2 s1 s2 fm...