日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言通過反射訪問結(jié)構(gòu)體成員的值

反射值對象(reflect.Value)提供對結(jié)構(gòu)體訪問的方法,通過這些方法可以完成對結(jié)構(gòu)體任意值的訪問,如下表所示。

反射值對象的成員訪問方法

方  法 備  注
Field(i int) Value 根據(jù)索引,返回索引對應(yīng)的結(jié)構(gòu)體成員字段的反射值對象。當值不是結(jié)構(gòu)體或索引超界時發(fā)生宕機
NumField() int 返回結(jié)構(gòu)體成員字段數(shù)量。當值不是結(jié)構(gòu)體或索引超界時發(fā)生宕機
FieldByName(name string) Value 根據(jù)給定字符串返回字符串對應(yīng)的結(jié)構(gòu)體字段。沒有找到時返回零值,當值不是結(jié)構(gòu)體或索引超界時發(fā)生宕機
FieldByIndex(index []int) Value 多層成員訪問時,根據(jù) []int 提供的每個結(jié)構(gòu)體的字段索引,返回字段的值。 沒有找到時返回零值,當值不是結(jié)構(gòu)體或索引超界時發(fā)生宕機
FieldByNameFunc(match func(string) bool) Value 根據(jù)匹配函數(shù)匹配需要的字段。找到時返回零值,當值不是結(jié)構(gòu)體或索引超界時發(fā)生宕機

下面代碼構(gòu)造一個結(jié)構(gòu)體包含不同類型的成員。通過 reflect.Value 提供的成員訪問函數(shù),可以獲得結(jié)構(gòu)體值的各種數(shù)據(jù)。

反射訪問結(jié)構(gòu)體成員值:

package main

import (
    "fmt"
    "reflect"
)

// 定義結(jié)構(gòu)體
type dummy struct {
    a int
    b string

    // 嵌入字段
    float32
    bool

    next *dummy
}


func main() {

    // 值包裝結(jié)構(gòu)體
    d := reflect.ValueOf(dummy{
            next: &dummy{},
    })

    // 獲取字段數(shù)量
    fmt.Println("NumField", d.NumField())

    // 獲取索引為2的字段(float32字段)
    floatField := d.Field(2)

    // 輸出字段類型
    fmt.Println("Field", floatField.Type())

    // 根據(jù)名字查找字段
    fmt.Println("FieldByName(\"b\").Type", d.FieldByName("b").Type())

    // 根據(jù)索引查找值中, next字段的int字段的值
    fmt.Println("FieldByIndex([]int{4, 0}).Type()", d.FieldByIndex([]int{4, 0}).Type())
}

代碼說明如下:

  • 第 9 行,定義結(jié)構(gòu)體,結(jié)構(gòu)體的每個字段的類型都不一樣。
  • 第 24 行,實例化結(jié)構(gòu)體并包裝為 reflect.Value 類型,成員中包含一個 *dummy 的實例。
  • 第 29 行,獲取結(jié)構(gòu)體的字段數(shù)量。
  • 第 32 和 35 行,獲取索引為2的字段值(float32 字段),并且打印類型。
  • 第 38 行,根據(jù)b字符串,查找到 b 字段的類型。
  • 第 41 行,[]int{4,0} 中的 4 表示,在 dummy 結(jié)構(gòu)中索引值為 4 的成員,也就是 next。next 的類型為 dummy,也是一個結(jié)構(gòu)體,因此使用 []int{4,0} 中的 0 繼續(xù)在 next 值的基礎(chǔ)上索引,結(jié)構(gòu)為 dummy 中索引值為 0 的 a 字段,類型為 int。

代碼輸出如下:

NumField 5
Field float32
FieldByName("b").Type string
FieldByIndex([]int{4, 0}).Type() int


當前標題:創(chuàng)新互聯(lián)GO教程:Go語言通過反射訪問結(jié)構(gòu)體成員的值
標題路徑:http://www.5511xx.com/article/cospgeh.html