我想从函数名调用现有库中的函数。在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。
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消