MST

星途 面试题库

面试题:Go中反射如何获取结构体字段的值

在Go语言中,给定一个结构体类型和它的实例,使用反射机制如何获取结构体中各个字段的值,请写出代码示例并解释关键步骤。
36.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "reflect"
)

// 定义结构体
type Person struct {
    Name string
    Age  int
}

func main() {
    // 创建结构体实例
    p := Person{
        Name: "John",
        Age:  30,
    }

    // 使用反射获取结构体值
    valueOf := reflect.ValueOf(p)

    // 判断是否为结构体类型
    if valueOf.Kind() != reflect.Struct {
        fmt.Println("Not a struct")
        return
    }

    // 遍历结构体字段
    for i := 0; i < valueOf.NumField(); i++ {
        field := valueOf.Field(i)
        fmt.Printf("%s: %v\n", valueOf.Type().Field(i).Name, field.Interface())
    }
}

关键步骤解释:

  1. 获取反射值:使用 reflect.ValueOf(p) 获取结构体实例 p 的反射值,这样可以操作该实例的字段。
  2. 类型判断:通过 valueOf.Kind() != reflect.Struct 判断获取到的值是否为结构体类型,如果不是则结束程序。
  3. 遍历字段:使用 valueOf.NumField() 获取结构体的字段数量,然后通过循环和 valueOf.Field(i) 获取每个字段的反射值。
  4. 获取字段名称和值:使用 valueOf.Type().Field(i).Name 获取字段名称,field.Interface() 获取字段的值,并打印输出。