go
runtime_error
ai_generated
true
panic: grpc: Server.RegisterService 发现服务 "pb.UserService" 重复注册
panic: grpc: Server.RegisterService found duplicate service registration for "pb.UserService"
ID: go/grpc-already-exists-duplicate-register
80%修复率
89%置信度
0证据数
2024-08-14首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| google.golang.org/grpc 1.50+ | active | — | — | — |
根因分析
同一个 gRPC 服务被注册到同一 grpc.Server 两次,通常来自多个包中的 init() 函数,或初始化时两次调用 RegisterXServer。
English
The same gRPC service was registered twice on one grpc.Server, often from init() functions in multiple packages or from calling RegisterXServer twice during setup.
解决方案
-
95% 成功率
func RegisterAll(s *grpc.Server) { pb.RegisterUserServiceServer(s, &userServer{}) pb.RegisterOrderServiceServer(s, &orderServer{}) } // call exactly once from main -
90% 成功率
// delete func init() { pb.RegisterUserServiceServer(...) } // replace with explicit call in main()
无效尝试
常见但无效的做法:
-
85% 失败
The server is left in an inconsistent state; subsequent calls may hit the wrong handler or panic again.
-
70% 失败
Two servers on the same listener cause bind errors or split traffic unpredictably.