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

其他格式: JSON · Markdown 中文 · English
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.

generic

解决方案

  1. 95% 成功率
    func RegisterAll(s *grpc.Server) {
        pb.RegisterUserServiceServer(s, &userServer{})
        pb.RegisterOrderServiceServer(s, &orderServer{})
    }
    // call exactly once from main
  2. 90% 成功率
    // delete func init() { pb.RegisterUserServiceServer(...) }
    // replace with explicit call in main()

无效尝试

常见但无效的做法:

  1. 85% 失败

    The server is left in an inconsistent state; subsequent calls may hit the wrong handler or panic again.

  2. 70% 失败

    Two servers on the same listener cause bind errors or split traffic unpredictably.