go data_error ai_generated true

错误:proto:无法序列化,消息为 nil

error: proto: cannot marshal, message is nil

ID: go/grpc-proto-marshal-error

其他格式: JSON · Markdown 中文 · English
80%修复率
90%置信度
0证据数
2024-01-20首次发现

版本兼容性

版本状态引入弃用备注
1.0 active

根因分析

尝试将 nil protobuf 消息序列化为字节,这在 protobuf 中是不允许的。

English

Attempting to marshal a nil protobuf message into bytes, which is not allowed in protobuf.

generic

解决方案

  1. 99% 成功率 Initialize the message before marshaling
    msg := &MyMessage{}
    b, err := proto.Marshal(msg)
  2. 98% 成功率 Use proto.MarshalOptions with deterministic output
    b, err := proto.MarshalOptions{}.Marshal(msg)

无效尝试

常见但无效的做法:

  1. Use a zero-value message instead of nil 50% 失败

    A zero-value message still marshals to empty bytes, but if the message is nil, it will panic or error.

  2. Check for nil but continue with empty bytes 40% 失败

    You need to handle the nil case explicitly, otherwise the error propagates.