reflect MakeFunc这个函数具体怎么用

MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value 谁能给个简单的例子, 并解释一下
已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: tupunco haohongfan james4e

https://github.com/astaxie/gopkg/blob/master/reflect/MakeFunc.md

tupunco

赞同来自: haohongfan

这个 `函数` 可以用来实现 `Proxy`, 写 `RPC` 的神器.
因为 `Go` 的机制问题, 这个 `函数` 需要一个 `函数原型 typ` 作为输入参数, 而这个 `原型` 不能 `动态` 构建, 也失去了部分灵活性.
- 这是go标准库中实现RPC服务器端本地调用的一段代码

```go
func (s *service) call(server *Server, sending *sync.Mutex, mtype *methodType, req *Request, argv, replyv reflect.Value, codec ServerCodec) {
mtype.Lock()
mtype.numCalls++
mtype.Unlock()
function := mtype.method.Func
// Invoke the method, providing a new value for the reply.
returnValues := function.Call([]reflect.Value{s.rcvr, argv, replyv})
// The return value for the method is an error.
errInter := returnValues[0].Interface()
errmsg := ""
if errInter != nil {
errmsg = errInter.(error).Error()
}
server.sendResponse(sending, req, replyv.Interface(), codec, errmsg)
server.freeRequest(req)
}
```

其中mtype.method的method类型为reflect.Method 运行了反射机制。

要回复问题请先登录注册