func (s *service) registerMethods() {
s.method = make(map[string]*methodType)
for i := 0; i < s.typ.NumMethod(); i++ {
method := s.typ.Method(i)
mType := method.Type
if mType.NumIn() != 3 || mType.NumOut() != 1 {
continue
}
if mType.Out(0) != reflect.TypeOf((*error)(nil)).Elem() {
continue
}
argType, replyType := mType.In(1), mType.In(2)
if !isExportedOrBuiltinType(argType) || !isExportedOrBuiltinType(replyType) {
continue
}
s.method[method.Name] = &methodType{
method: method,
ArgType: argType,
ReplyType: replyType,
}
log.Printf("rpc server: register %s.%s\n", s.name, method.Name)
}
}
reflect.TypeOf((*error)(nil)).Elem()这段代码是什么意思?我知道if mType.Out(0) != reflect.TypeOf((*error)(nil)).Elem()正在尝试确定方法的返回类型是否为错误。但对我来说,reflect.TypeOf((error)(nil))直觉上会做同样的事情,但不幸的是不会。当我尝试编译这段代码时,它说 type error is not an expression,在这种情况下它是什么意思?不reflect.Typeof()接受某种类型的参数?我发现 (*error)(nil) 等同于 *error = nil。在上面的上下文中,我对这个表达感到困惑。
holdtom
相关分类