{"record":{"id":"32462165e76ab08d","repo":"geektutu/7days-golang","slug":"rpc-server-can-t-find-service-324621","errorCode":null,"errorMessage":"rpc server: can't find service ","messagePattern":"rpc server: can't find service ","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"gee-rpc/day5-http-debug/server.go","lineNumber":122,"sourceCode":"\tif err := cc.ReadHeader(&h); err != nil {\n\t\tif err != io.EOF && err != io.ErrUnexpectedEOF {\n\t\t\tlog.Println(\"rpc server: read header error:\", err)\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn &h, nil\n}\n\nfunc (server *Server) findService(serviceMethod string) (svc *service, mtype *methodType, err error) {\n\tdot := strings.LastIndex(serviceMethod, \".\")\n\tif dot < 0 {\n\t\terr = errors.New(\"rpc server: service/method request ill-formed: \" + serviceMethod)\n\t\treturn\n\t}\n\tserviceName, methodName := serviceMethod[:dot], serviceMethod[dot+1:]\n\tsvci, ok := server.serviceMap.Load(serviceName)\n\tif !ok {\n\t\terr = errors.New(\"rpc server: can't find service \" + serviceName)\n\t\treturn\n\t}\n\tsvc = svci.(*service)\n\tmtype = svc.method[methodName]\n\tif mtype == nil {\n\t\terr = errors.New(\"rpc server: can't find method \" + methodName)\n\t}\n\treturn\n}\n\nfunc (server *Server) readRequest(cc codec.Codec) (*request, error) {\n\th, err := server.readRequestHeader(cc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq := &request{h: h}\n\treq.svc, req.mtype, err = server.findService(h.ServiceMethod)\n\tif err != nil {","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/geektutu/7days-golang/blob/cf3644382101dc13e7fd92e8f5c66cabc51bcd3b/gee-rpc/day5-http-debug/server.go#L104-L140","documentation":"The request string was parsed as \"Service.Method\" but the service part is not registered on this server's serviceMap. The server returns this error so the client knows the requested service does not exist on this endpoint.","triggerScenarios":"Call(\"Foo.Bar\") when Register was never called with a receiver named Foo, the service was registered on a different Server instance, or the service name casing differs from the derived name.","commonSituations":"Forgetting to call Register/DefaultServer.Register on the server side, deploying a service that was removed or renamed, or pointing a client at the wrong server/port that hosts different services.","solutions":["Register the service on the server: Register(new(Foo)) or DefaultServer.Register(new(Foo))","Confirm the exact registered service name (Register uses the exported receiver type name) matches the client string","Ensure the client targets the server instance that actually hosts the service"],"exampleFix":"// before\nclient.Call(\"DemoService.Div\", args, reply) // DemoService never registered\n// after\nsrv := geeprpc.NewServer()\nsrv.Register(new(DemoService)) // server side\nclient.Call(\"DemoService.Div\", args, reply)","handlingStrategy":"validation","validationCode":"func (c *Client) MustCall(service, method string, args, reply interface{}) error {\n    if !serviceRegistered[service] { // populated from server registration list\n        return fmt.Errorf(\"service %q is not registered on this server\", service)\n    }\n    return c.Call(service+\".\"+method, args, reply)\n}","typeGuard":null,"tryCatchPattern":"err := client.Call(\"DemoService.Div\", args, reply)\nif err != nil && strings.Contains(err.Error(), \"can't find service\") {\n    return fmt.Errorf(\"server at %s does not host this service; check Register calls: %w\", addr, err)\n}","preventionTips":["Assert in server startup code that every expected service registration returned nil error","Share the list of registered service names between server and client (config or generated code)","Integration-test each Service.Method string against a running server before release"],"tags":["rpc","service-lookup","registration"],"backgroundTag":"rpc-service-not-found","analyzedSha":"cf3644382101dc13e7fd92e8f5c66cabc51bcd3b","analyzedAt":"2026-09-03T18:31:24.087Z","contentChangedAt":"2026-09-03T18:31:24.087Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}