Skip to content

gRPC Server

go-zero wraps the standard gRPC server with resilience, service registration, and tracing built in.

greeter.proto
syntax = "proto3";
package greeter;
option go_package = "./greeter";
message SayHelloReq { string name = 1; }
message SayHelloResp { string message = 1; }
service Greeter {
rpc SayHello(SayHelloReq) returns(SayHelloResp);
}
Terminal window
goctl rpc protoc greeter.proto --go_out=. --go-grpc_out=. --zrpc_out=.

Generated layout:

greeter/
├── etc/greeter.yaml
├── internal/
│ ├── config/config.go
│ ├── logic/sayhellologic.go
│ ├── server/greeterserver.go
│ └── svc/servicecontext.go
├── greeter/ # protobuf generated
└── greeter.go
internal/logic/sayhellologic.go
func (l *SayHelloLogic) SayHello(in *greeter.SayHelloReq) (*greeter.SayHelloResp, error) {
return &greeter.SayHelloResp{Message: "Hello " + in.Name}, nil
}
etc/greeter.yaml
Name: greeter.rpc
ListenOn: 0.0.0.0:8080
Etcd:
Hosts: [127.0.0.1:2379]
Key: greeter.rpc
Terminal window
go run greeter.go