golang + grpc: зарегистрировать сервис на GrpcServer

Я работаю с этим примером для создания сервер go lang grpc.

Но кажется, что я что-то упускаю - в примере есть фаза регистрации службы на grpc-сервере, но мой вывод протокола не экспортирует метод регистрации:

s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})

Были ли изменения в компиляции файлов 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)
    }
}

person Shikloshi    schedule 04.02.2017    source источник
comment
afaik для Go grpc, вы должны скомпилировать его с плагином protoc --go_out=plugins=grpc:. *.proto github.com/golang/protobuf#grpc-support   -  person Wendy Adi    schedule 04.02.2017


Ответы (2)


Я неправильно компилирую?

protoc --go_output=. *.proto

Да. Как указано в комментарии пользователя Wendy Adi, параметр командной строки для protoc должен быть --go_out, а не --go_output, а также необходим параметр plugins=grpc (согласно codegen.sh скрипт). Вы должны иметь возможность использовать protoc для регенерации файла .pb.go в примере с helloworld:

cd $GOPATH/src/google.golang.org/grpc/examples/helloworld
mv helloworld.pb.go helloworld.pb.go.orig
protoc --go_out=plugins=grpc:. helloworld.proto

После этого greeter_server должен правильно скомпилироваться:

cd ../greeter_server
go build .
person Drew MacInnis    schedule 04.02.2017

при использовании grpc 3 используйте ниже cmd

protoc -I=proto --go_out=. --go-grpc_out=. proto/*.proto
person sourav pandit    schedule 18.01.2021