Files

78 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 示例 07外部 Proto — 相同 `go_package`
本示例演示从外部目录导入 proto 文件,且两个文件共享**相同**的 `go_package`
## Proto 定义
`service.proto``ext.proto` 使用相同的 `go_package`
```protobuf
option go_package = "example.com/demo/pb";
```
源码布局:
```
07-external-proto-same-pkg/
├── ext_protos
│ └── ext.proto # 外部 protogo_package = "example.com/demo/pb"
├── service.proto # 服务定义go_package = "example.com/demo/pb"
├── README.md
└── README-cn.md
```
- `ext.proto` 位于独立目录(`ext_protos/`),但与 `service.proto` 有相同的 `go_package`
- `service.proto` 导入 `ext.proto`,使用 `ext.ExtReq` / `ext.ExtReply` 作为 RPC 类型。
## 生成命令
首先,在输出目录中初始化 `go.mod`
```bash
mkdir -p output && cd output && go mod init example.com/demo && cd ..
```
然后生成代码(注意 `-I ./ext_protos`
```bash
goctl rpc protoc service.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 . -I ./ext_protos
```
生成的目录结构:
```
output/
├── etc
│ └── svc.yaml
├── go.mod
├── internal
│ ├── config
│ │ └── config.go
│ ├── logic
│ │ └── querylogic.go
│ ├── server
│ │ └── queryserviceserver.go
│ └── svc
│ └── servicecontext.go
├── pb
│ ├── ext.pb.go
│ ├── service.pb.go
│ └── service_grpc.pb.go
├── queryservice
│ └── queryservice.go
└── svc.go
```
## 要点说明
- `ext.proto` 位于独立目录(`ext_protos/`),但与 `service.proto` 有相同的 `go_package`
- 使用 `-I ./ext_protos` 将外部目录添加到 proto 搜索路径。
- 当外部 proto 有**相同**的 `go_package` 时,所有类型合并到一个 Go 包中——无需跨包导入。