Go語言基礎之結構體反射

2021-10-16 10:18:33 字數 2922 閱讀 2623

反射在結構體中的應用,才是最廣泛的!畢竟在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...