【发布时间】:2021-12-10 12:23:13
【问题描述】:
这是我的原型文件:
syntax = "proto3";
option go_package = ".;pb";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply); // hello
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
**
package main
import (
"awesomeProject/grpc_test/proto"
"context"
"google.golang.org/grpc"
"net"
)
type Server struct {}
func (s *Server) SayHello(ctx context.Context, request *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{
Message: "hello" + request.Name,
}, nil
}
func main() {
g := grpc.NewServer()
pb.RegisterGreeterServer(g, &Server{})
lis, err := net.Listen("tcp", "0.0.0.0:8080")
if err != nil {
panic("failed to listen: " + err.Error() )
}
err = g.Serve(lis)
if err != nil {
panic("failed to start grpc: " + err.Error())
}
}
我得到了一个错误:
cannot use &Server{} (type *Server) as type pb.GreeterServer in argument to pb.RegisterGreeterServer:*Server does not implement pb.GreeterServer (missing pb.mustEmbedUnimplementedGreeterServer method)
如何解决?
【问题讨论】:
-
你用什么从 proto 文件生成 Go 代码?看起来您正在使用一个需要您将类型嵌入到服务器结构中的工具包。
-
一些实现问题。你结帐了吗buf.build?它有助于在 Go 中设置和维护 gRPC 服务。
-
@BurakSerdar 在以
protoc --go_out=. --go-grpc_out=.调用时与官方protoc-gen-go-grpc 工具包一起发生。通过插件调用时(还没有)发生:protoc --go_out=plugins=grpc:. -
这能回答你的问题吗? grpc with mustEmbedUnimplemented*** method