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))reflect.Typeof()
繁星点点滴滴
相关分类