如何在 Golang 中使用反射?
反射在 Golang 中是指在執行時瞭解我們正在處理的資料的資料型別。通常在某些情況下,我們希望知道在執行時獲取的某個變數的資料型別或類似的東西。
藉助反射,我們可以提取 Golang 中任何資料型別的型別、值和種類。
在本文中,我們將探討反射中使用的不同第三方函式。
示例 1 – reflect.TypeOf()
它用於返回型別reflect的值。簡單來說,它用於瞭解資料型別是什麼。
考慮下面顯示的程式碼,我們將使用此函式。
package main import ( "fmt" "reflect" ) func main() { var name string = "TutorialsPoint" fmt.Println(reflect.TypeOf(name)) sl := []int{1, 2, 3, 4, 5} fmt.Println(reflect.TypeOf(sl)) num := 989 fmt.Println(reflect.TypeOf(num)) }
輸出
如果我們在上述命令上執行命令go run main.go,我們將在終端中獲得以下輸出。
string []int int
示例 2 – reflect.ValueOf()
當我們想要查詢變數的值時使用它。考慮下面顯示的程式碼,我們將使用此函式。
package main import ( "fmt" "reflect" ) func main() { var name string = "TutorialsPoint" fmt.Println(reflect.ValueOf(name)) sl := []int{1, 2, 3, 4, 5} fmt.Println(reflect.ValueOf(sl)) num := 989 fmt.Println(reflect.ValueOf(num)) }
輸出
如果我們在上述命令上執行命令 go run main.go,我們將在終端中獲得以下輸出。
TutorialsPoint [1 2 3 4 5] 989
示例 3
我們還可以找到結構體內部的欄位數量。考慮下面顯示的程式碼。
package main import ( "fmt" "reflect" ) type Person struct { age int name string number float64 isMarries bool } func main() { p := Person{10, "ABCD", 15.20, true} typeT := reflect.TypeOf(p) fmt.Println(typeT.NumField()) }
輸出
如果我們在上述命令上執行命令go run main.go,我們將在終端中獲得以下輸出。
4
廣告