猿问

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

我想从函数名调用现有库中的函数。


在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 change

func (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


白衣非少年
浏览 173回答 1
1回答

慕仙森

您需要使用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。
随时随地看视频慕课网APP

相关分类

Go
我要回答