grpc: 非导出方法,并且在不同的包中定义

huangapple go评论145阅读模式
英文:

grpc: non-exported method and is defined in a different package

问题

更新:看起来这是一个Goland的问题。

找到了使用grpc一元调用的示例

由于某种原因,无法实现Server结构体,你知道我为什么会得到这个错误吗:

  1. Cannot use '&Server{}' (type *Server) as the type GreetServiceServer Type cannot implement 'GreetServiceServer' as it has a non-exported method and is defined in a different package

main.go

  1. package main
  2. import (
  3. "context"
  4. "log"
  5. "net"
  6. greetpb "example.com/s1/pb"
  7. "google.golang.org/grpc"
  8. )
  9. type Server struct {
  10. greetpb.UnimplementedGreetServiceServer
  11. }
  12. func (*Server) mustEmbedUnimplementedGreetServiceServer() {
  13. //TODO implement me
  14. panic("implement me")
  15. }
  16. // Greet greets with FirstName
  17. func (*Server) Greet(ctx context.Context, in *greetpb.GreetRequest) (*greetpb.GreetResponse, error) {
  18. result := "Hello " + in.GetGreeting().GetFirstName()
  19. res := greetpb.GreetResponse{
  20. Result: result,
  21. }
  22. return &res, nil
  23. }
  24. func main() {
  25. lis, err := net.Listen("tcp", "0.0.0.0:50051")
  26. if err != nil {
  27. log.Fatalf("Failed to listen %v", err)
  28. }
  29. s := grpc.NewServer()
  30. greetpb.RegisterGreetServiceServer(s, &Server{})
  31. if err := s.Serve(lis); err != nil {
  32. log.Fatalf("Failed to start server %v", err)
  33. }
  34. }

greet.proto

  1. syntax = "proto3";
  2. package greet;
  3. option go_package="greetpb";
  4. message Greeting {
  5. string firstName = 1;
  6. string lastName = 2;
  7. }
  8. message GreetRequest {
  9. Greeting greeting = 1;
  10. }
  11. message GreetResponse {
  12. string result = 1;
  13. }
  14. service GreetService{
  15. rpc Greet(GreetRequest) returns (GreetResponse){};
  16. }
英文:

Update: It looks like it is a Goland issue.

Found this example of using grpc unary.

For some reason, the Server struct can not be implemented, do you know why I am gettign this error:

  1. Cannot use '&Server{}' (type *Server) as the type GreetServiceServer Type cannot implement 'GreetServiceServer' as it has a non-exported method and is defined in a different package

main.go

  1. package main
  2. import (
  3. "context"
  4. "log"
  5. "net"
  6. greetpb "example.com/s1/pb"
  7. "google.golang.org/grpc"
  8. )
  9. type Server struct {
  10. greetpb.UnimplementedGreetServiceServer
  11. }
  12. func (*Server) mustEmbedUnimplementedGreetServiceServer() {
  13. //TODO implement me
  14. panic("implement me")
  15. }
  16. // Greet greets with FirstName
  17. func (*Server) Greet(ctx context.Context, in *greetpb.GreetRequest) (*greetpb.GreetResponse, error) {
  18. result := "Hello " + in.GetGreeting().GetFirstName()
  19. res := greetpb.GreetResponse{
  20. Result: result,
  21. }
  22. return &res, nil
  23. }
  24. func main() {
  25. lis, err := net.Listen("tcp", "0.0.0.0:50051")
  26. if err != nil {
  27. log.Fatalf("Failed to listen %v", err)
  28. }
  29. s := grpc.NewServer()
  30. greetpb.RegisterGreetServiceServer(s, &Server{})
  31. if err := s.Serve(lis); err != nil {
  32. log.Fatalf("Failed to start server %v", err)
  33. }
  34. }

greet.proto

  1. syntax = "proto3";
  2. package greet;
  3. option go_package="greetpb";
  4. message Greeting {
  5. string firstName = 1;
  6. string lastName = 2;
  7. }
  8. message GreetRequest {
  9. Greeting greeting = 1;
  10. }
  11. message GreetResponse {
  12. string result = 1;
  13. }
  14. service GreetService{
  15. rpc Greet(GreetRequest) returns (GreetResponse){};
  16. }

答案1

得分: 2

如果你在 Goland 中遇到这个问题,只需在 Goland 中删除自动生成的接口实现:

  1. func (*Server) mustEmbedUnimplementedGreetServiceServer() {
  2. //TODO implement me
  3. panic("implement me")
  4. }

但你需要定义:

  1. greetpb.UnimplementedGreetServiceServer
英文:

If you encounter this in Goland, just remove auto-generated interface implementation in Goland:

  1. func (*Server) mustEmbedUnimplementedGreetServiceServer() {
  2. //TODO implement me
  3. panic("implement me")
  4. }

But you will need to define:

  1. greetpb.UnimplementedGreetServiceServer

huangapple
  • 本文由 发表于 2022年7月2日 21:04:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/72839260.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定