golang通过反射调用方法

本文介绍了一种利用Go语言的反射机制来动态调用不同参数类型的方法的技术。通过示例展示了如何定义和使用反射来调用无参及带参的方法,并获取其返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
	"fmt"
	"reflect"
	"log"
)

func main() {
	//调用无参方法
	reflectInterface(testReflectParam,nil)

	//调用有参方法
	reflectInterface(testReflectParam2,getValues(5,"Hello"))

}

//根据参数获取对应的Values
func getValues(param ...interface{}) []reflect.Value {
	vals := make([]reflect.Value,0,len(param))
	for i := range param {
		vals = append(vals,reflect.ValueOf(param[i]))
	}
	return vals
}


func reflectInterface(funcInter interface{},paramsValue []reflect.Value)  {
	v := reflect.ValueOf(funcInter)
	if v.Kind() != reflect.Func {
		log.Fatal("funcInter is not func")
	}

	values := v.Call(paramsValue) //方法调用并返回值
	for i := range values {
		fmt.Println(values[i])
	}
}

//无参方法
func testReflectParam() (string,string){
	return "hello world","你好!"
}

//有参方法
func testReflectParam2(i int,s string) (int,string){
	i++
	return i,s
}

打印结果:
hello world
你好!
6
Hello

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值