go
runtime_error
ai_generated
true
panic: runtime error: invalid memory address or nil pointer dereference
ID: go/proto-nil-message-panic
80%Fix Rate
88%Confidence
0Evidence
2024-02-18First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| google.golang.org/protobuf v1.28+ | active | — | — | — |
Root Cause
A nil *Message pointer was passed to proto.Marshal, proto.Clone, or a generated getter was called on a nil receiver that dereferences a map field.
generic中文
向 proto.Marshal、proto.Clone 传递了 nil *Message 指针,或在 nil 接收者上调用了会解引用 map 字段的生成 getter。
Workarounds
-
95% success
if msg == nil { return nil, status.Error(codes.InvalidArgument, "nil message") } data, err := proto.Marshal(msg) if err != nil { return nil, err } -
85% success
clone := proto.Clone(msg) // returns nil if msg is nil if clone == nil { return nil, errors.New("nil proto message") }
Dead Ends
Common approaches that don't work:
-
85% fail
Masks the nil bug; the same nil pointer will surface elsewhere or cause silent data loss.
-
95% fail
AllowPartial only affects required-field validation, not nil pointer dereferences.