golang + grpc:在GrpcServer上注册服务

Shi*_*shi 1 go protocol-buffers grpc

我正在使用此示例来构建go lang grpc服务器。

但似乎我缺少了一些东西-在该示例中,有一个将服务注册到grpc-server的阶段,但是我的协议输出没有导出注册方法:

s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
Run Code Online (Sandbox Code Playgroud)

protobuf3文件的编译是否发生了变化?

我是用错误的方式编译吗?

protoc --go_output=. *.proto

以及如何使该服务适用于服务器,目前还不是:

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    //register should go here?!
    reflection.Register(s)
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to server: %v", err)
    }
}
Run Code Online (Sandbox Code Playgroud)

Dre*_*nis 7

我是用错误的方式编译吗?

protoc --go_output=. *.proto

是。正如指出的评论温迪阿迪,命令行选项protoc应该是--go_out--go_outputplugins=grpc选项同样也需要(根据codegen.sh脚本)。您应该可以在helloworld示例中使用它protoc来重新生成.pb.go文件:

cd $GOPATH/src/google.golang.org/grpc/examples/helloworld
mv helloworld.pb.go helloworld.pb.go.orig
protoc --go_out=plugins=grpc:. helloworld.proto
Run Code Online (Sandbox Code Playgroud)

greeter_server应正确编译算账:

cd ../greeter_server
go build .
Run Code Online (Sandbox Code Playgroud)