go data_error ai_generated true

proto: required field "pb.User.id" not set

ID: go/proto-required-not-set

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
0Evidence
2024-02-28First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
google.golang.org/protobuf 1.29+ active — — —

Root Cause

A proto2 message with required fields was marshalled or unmarshalled without setting all required fields. Proto3 does not have required fields, so this is proto2-specific.

generic

中文

一个带有 required 字段的 proto2 消息在未设置所有必填字段的情况下被序列化或反序列化。proto3 没有 required 字段,因此这是 proto2 特有的。

Workarounds

  1. 95% success
    Set all required fields before marshalling:
    msg := &pb.User{Id: "123", Name: "alice"} // all required fields populated
    b, err := proto.Marshal(msg)
  2. 90% success
    Use proto.CheckInitialized to validate before sending:
    if err := proto.CheckInitialized(msg); err != nil { return status.Error(codes.InvalidArgument, err.Error()) }

Dead Ends

Common approaches that don't work:

  1. 90% fail

    DiscardUnknown only affects unknown fields; missing required fields are still validated and rejected.

  2. 75% fail

    Changing syntax changes field presence semantics; existing callers relying on required-field enforcement silently accept partial messages.