MST

星途 面试题库

面试题:Go中反射动态调用方法基础

在Go语言中,如何使用反射来动态调用一个结构体的方法?请写出实现步骤和关键代码示例。假设存在一个结构体 `User`,有方法 `GetName` 返回用户名字。
21.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 实现步骤

    • 获取结构体实例的反射值对象 reflect.Value
    • 通过反射值对象获取方法的 reflect.Value
    • 准备方法调用所需的参数(如果方法有参数),以 []reflect.Value 形式传递。
    • 调用方法并获取返回值。
  2. 关键代码示例

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name string
}

func (u User) GetName() string {
    return u.Name
}

func main() {
    user := User{Name: "John"}
    // 获取结构体实例的反射值对象
    valueOf := reflect.ValueOf(user)
    // 获取方法的reflect.Value
    method := valueOf.MethodByName("GetName")
    // 调用方法,这里GetName无参数,所以传递nil
    results := method.Call(nil)
    // 处理返回值
    if len(results) > 0 {
        fmt.Println(results[0].String())
    }
}