如何在 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

更新於: 2021年11月1日

542 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告