在go語言中,可以透過反射來取得類型資訊;只需要呼叫reflect套件的TypeOf()函數。方法:1、使用「reflect.TypeOf()」函數取得指定變數的類型物件;2、使用Name()和Kind()取得類型物件的類型信息,語法「類型物件.Name()」和「類型對象.Kind()」。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
在go語言中,可以透過反射來取得類型資訊。
在 Go語言中透過呼叫 reflect.TypeOf 函數,我們可以從一個任何非介面類型的值建立一個 reflect.Type 值。 reflect.Type 值表示此非介面值的類型。透過此值,我們可以得到很多此非介面類型的信息。當然,我們也可以將一個介面值傳遞給一個 reflect.TypeOf 函數調用,但是此調用將傳回一個表示著此介面值的動態類型的 reflect.Type 值。
實際上,reflect.TypeOf 函數的唯一參數的類型為 interface{},reflect.TypeOf 函數將總是傳回一個表示著此唯一介面參數值的動態類型的 reflect.Type 值。
那如何得到一個表示著某個介面類型的 reflect.Type 值呢?我們必須透過下面將要介紹的一些間接途徑來達到這個目的。
類型 reflect.Type 為一個介面類型,它指定了若干方法。透過這些方法,我們能夠觀察到一個 reflect.Type 值所表示的 Go類型的各種資訊。這些方法中的有的適用於所有種類的類型,有的只適用於一種或幾種類型。透過不合適的 reflect.Type 屬主值呼叫某個方法將在執行時產生一個恐慌。
使用 reflect.TypeOf() 函數可以獲得任意值的類型物件(reflect.Type),程式透過類型物件可以存取任意值的類型資訊。以下透過範例來理解取得類型物件的過程:
package main import ( "fmt" "reflect" ) func main() { var a int typeOfA := reflect.TypeOf(a) fmt.Println(typeOfA.Name(), typeOfA.Kind()) }
程式碼輸出如下:
程式碼說明如下:
#第10 行,定義一個int 類型的變數。
第 12 行,透過 reflect.TypeOf() 取得變數 a 的類型物件 typeOfA,類型為 reflect.Type()。
第 14 行中,透過 typeOfA 類型物件的成員函數,可以分別取得到 typeOfA 變數的型別名稱為 int,種類(Kind)為 int。
擴展知識:反射的類型(Type)與種類(Kind)
在使用反射時,需要先理解類型(Type)和種類(Kind)的區別。在程式設計中,使用最多的是類型,但在反射中,當需要區分一個大品種的類型時,就會用到種類(Kind)。例如,需要統一判斷類型中的指標時,使用種類(Kind)資訊就較為方便。
以上是go語言怎麼取得類型訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!