为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:如何将 refect 包与现有库一起使用

Golang:如何将 refect 包与现有库一起使用

Go
白衣非少年 2021-11-08 16:06:17
我想从函数名调用现有库中的函数。在golang中,只从methodname调用方法就可以了,因为reflect包有(v Value) MethodByName(name string)。但是,对于调用方法,所有方法参数都应该是reflect.Value。如何调用参数不是reflect.Value 的函数。package main//-------------------------------// Example of existing library//-------------------------------type Client struct {    id string}type Method1 struct {    record string}// type Method2 struct{}// ...// defined at library : do not changefunc (c *Client) Method1(d *Method1) {    d.record = c.id}//------------------// Edit from here//------------------func main() {    // give MethodN from cmd line    method_name := "Method1"    // How can I call Method1(* Method1) propery???    // * Make Method1 instance    // * Call Method1 function    //...    //fmt.Printf("%s record is %s", method_name, d.record)}http://play.golang.org/p/6B6-90GTwc
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

您需要使用reflect.Values获取客户端和方法值,reflect.ValueOf然后使用reflect.Value.Call:


methodName := "Method1"


c := &Client{id: "foo"}

m := &Method1{record: "bar"}


args := []reflect.Value{reflect.ValueOf(m)}

reflect.ValueOf(c).MethodByName(methodName).Call(args)

fmt.Printf("%s record is %s", methodName, m.record)

游乐场:http : //play.golang.org/p/PT33dqj9Q9。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信