php-Editor Yuzu, hallo! Was das Problem der Implementierung des Typs „X“ betrifft, so kann er nicht direkt implementiert werden, da er über nicht exportierte Methoden verfügt und in einem anderen Paket definiert ist. In PHP kann nicht direkt auf Methoden und Eigenschaften zwischen verschiedenen Paketen zugegriffen werden. Wenn Sie den Typ „X“ implementieren möchten, können Sie die Verwendung von Schnittstellen oder Vererbung in Betracht ziehen, um die erforderliche Funktionalität indirekt zu implementieren. Erhalten Sie die erforderlichen Methoden und Eigenschaften, indem Sie eine Schnittstelle definieren und in verschiedenen Klassen implementieren oder durch Vererbung. Dies ermöglicht die Implementierung der Funktionalität vom Typ „X“ in verschiedenen Paketen. Hoffe das hilft!
Ich habe diesen Code:
s := grpc.newserver() pb.registermessageserviceserver(s, &messageserver{})
Ich habe diesen Fehler:
cannot use '&messageserver{}' (type *messageserver) as the type messageserviceserver type cannot implement 'messageserviceserver' as it has a non-exported method and is defined in a different package
Meine Messageserver-Struktur sieht so aus:
type messageserver struct{} func (s *messageserver) mustembedunimplementedmessageserviceserver() { //todo implement me panic("implement me") } func (s *messageserver) mustembedunimplementedmessageserviceserver() { //todo implement me panic("implement me") } func (s *messageserver) sendmessage(ctx context.context, msg *pb.message) (*pb.response, error) { // write the message to kafka producer, err := sarama.newsyncproducer([]string{kafkabroker}, nil) if err != nil { log.fatalf("error creating kafka producer: %v", err) return nil, err } defer producer.close() kafkamsg := &sarama.producermessage{ topic: kafkatopic, value: sarama.stringencoder(msg.content), } _, _, err = producer.sendmessage(kafkamsg) if err != nil { log.printf("failed to send message to kafka: %v", err) return nil, err } return &pb.response{message: "message sent to kafka"}, nil }
Der Fehler liegt in dieser Zeile:
pb.RegisterMessageServiceServer(s, &messageServer{}) // here
Keine Ahnung, was los ist :(
Sie sollten mustEmbedUnimplementedMessageServiceServer()
的实现。您应该使您的服务器结构嵌入 UnimplementedMessageServiceServer
nicht angeben. Das Mitglied wird so benannt, um Ihnen das zu sagen. Die Schnittstelle hat auch einen Dokumentationskommentar mit der Aufschrift
Alle Implementierungen müssen UnimplementedMessageServiceServer aus Gründen der Vorwärtskompatibilität einbetten.
Die Idee ist, dass gRPC-Entwickler eines Tages möglicherweise eine neue Methode zur Serverschnittstelle hinzufügen. Wenn sie dies tun, betten sie auch den Typ unimplemented
类型添加一个新方法,该方法返回“method Blah not Implemented”错误。由于您被迫将 unimplemented
in Ihren Servertyp ein, sodass Sie diese Methode erben und eine Standardimplementierung erhalten, die einen Fehler auslöst, anstatt dass Ihr Code aufgrund der neuen Methoden Ihres Servertyps plötzlich bei Typprüfungen fehlschlägt fehlen.
Das obige ist der detaillierte Inhalt vonDer Typ kann „X' nicht implementieren, da er über nicht exportierte Methoden verfügt und in einem anderen Paket definiert ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!