MST

星途 面试题库

面试题:Go语言中反射如何动态调整结构体字段值

假设你有一个结构体类型 `type Person struct { Name string; Age int }`,使用Go的反射机制,编写代码动态调整 `Person` 实例的 `Name` 和 `Age` 字段值,并简要说明反射调整字段值的主要步骤。
28.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "reflect"
)

func main() {
    p := Person{Name: "Alice", Age: 30}
    valueOf := reflect.ValueOf(&p).Elem()

    nameField := valueOf.FieldByName("Name")
    if nameField.IsValid() {
        nameField.SetString("Bob")
    }

    ageField := valueOf.FieldByName("Age")
    if ageField.IsValid() {
        ageField.SetInt(35)
    }

    fmt.Println(p)
}

type Person struct {
    Name string
    Age  int
}

反射调整字段值的主要步骤:

  1. 获取Value对象:使用reflect.ValueOf获取结构体实例的reflect.Value对象,如果要修改值,需要传入结构体指针,然后通过Elem方法获取指针指向的实际结构体的reflect.Value
  2. 定位字段:通过FieldByName等方法定位到要修改的字段,该方法返回一个reflect.Value对象代表对应字段。
  3. 检查有效性并修改:使用IsValid方法检查获取的字段是否有效,若有效则使用对应的Set方法(如SetStringSetInt等)修改字段的值。