C語言中文網 目錄
首頁 > Go語言教程 > Go語言反射 閱讀:3,423

Go語言reflect.Elem()——通過反射獲取指針指向的元素類型

Go 程序中對指針獲取反射對象時,可以通過 reflect.Elem() 方法獲取這個指針指向的元素類型。這個獲取過程被稱為取元素,等效于對指針類型變量做了一個*操作,代碼如下:
package main

import (
    "fmt"
    "reflect"
)

func main() {

    // 聲明一個空結構體
    type cat struct {
    }

    // 創建cat的實例
    ins := &cat{}

    // 獲取結構體實例的反射類型對象
    typeOfCat := reflect.TypeOf(ins)

    // 顯示反射類型對象的名稱和種類
    fmt.Printf("name:'%v' kind:'%v'\n",typeOfCat.Name(), typeOfCat.Kind())

    // 取類型的元素
    typeOfCat = typeOfCat.Elem()

    // 顯示反射類型對象的名稱和種類
    fmt.Printf("element name: '%v', element kind: '%v'\n", typeOfCat.Name(), typeOfCat.Kind())

}
代碼輸出如下:
name: ''  kind: 'ptr'
element name: 'cat', element kind: 'struct'

代碼說明如下:
  • 第 15 行,創建了cat結構體的實例,ins 是一個 *cat 類型的指針變量。
  • 第 18 行,對指針變量獲取反射類型信息。
  • 第 21 行,輸出指針變量的類型名稱和種類。Go 語言的反射中對所有指針變量的種類都是 Ptr,但注意,指針變量的類型名稱是空,不是 *cat。
  • 第 24 行,取指針類型的元素類型,也就是 cat 類型。這個操作不可逆,不可以通過一個非指針類型獲取它的指針類型。
  • 第 27 行,輸出指針變量指向元素的類型名稱和種類,得到了 cat 的類型名稱(cat)和種類(struct)。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo