mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
2.2 KiB
2.2 KiB
Example 05: Multiple Services (--multiple)
This example demonstrates generating multiple RPC services from a single proto file.
Proto Definition
Two proto files share the same go_package:
option go_package = "example.com/demo/pb";
shared.proto— Defines shared message types (Meta).multi.proto— Defines two services:SearchServiceandNotifyService.
The -m (or --multiple) flag is required when a proto file contains more than one service block.
Generation Commands
First, initialize the output directory with a go.mod:
mkdir -p output && cd output && go mod init example.com/demo && cd ..
Then generate the code with the -m flag:
goctl rpc protoc multi.proto \
--go_out=output \
--go-grpc_out=output \
--zrpc_out=output \
--go_opt=module=example.com/demo \
--go-grpc_opt=module=example.com/demo \
--module=example.com/demo \
-I . \
-m
Generated directory structure:
output/
├── client
│ ├── notifyservice
│ │ └── notifyservice.go
│ └── searchservice
│ └── searchservice.go
├── etc
│ └── multisvc.yaml
├── go.mod
├── internal
│ ├── config
│ │ └── config.go
│ ├── logic
│ │ ├── notifyservice
│ │ │ └── notifylogic.go
│ │ └── searchservice
│ │ └── searchlogic.go
│ ├── server
│ │ ├── notifyservice
│ │ │ └── notifyserviceserver.go
│ │ └── searchservice
│ │ └── searchserviceserver.go
│ └── svc
│ └── servicecontext.go
├── multisvc.go
└── pb
├── multi.pb.go
├── multi_grpc.pb.go
└── shared.pb.go
Key Points
- The
-m(or--multiple) flag enables multiple-service mode. - In multiple mode,
client/contains per-service subdirectories;logic/andserver/are also grouped by service name. - Both services share a single entry point (
multisvc.go) and config. - Without
--multiple, goctl only allows oneserviceblock per proto file. - All services share the same
config.goandservicecontext.go.