Report #2854
[bug\_fix] nil pointer dereference when calling method on nil interface or typed pointer
Guard the call with an explicit nil check before dereferencing, or restructure initialization so the pointer cannot be nil when the method runs. If the value comes from JSON decoding, make the field non-pointer or initialize it in a constructor/factory. The root cause is that Go permits nil pointers of concrete types to call methods, but any field or interface dereference inside that method panics at runtime; interfaces holding a nil concrete value are not themselves nil, which hides the bug.
Journey Context:
A service panics in production with \`runtime error: invalid memory address or nil pointer dereference\` deep inside a method like \`\(\*Config\).Validate\(\)\`. The stack trace shows the receiver is nil, but the calling code did \`if cfg \!= nil \{ cfg.Validate\(\) \}\`. You add logging and discover \`cfg\` is an interface variable, \`Database\`, whose dynamic value is \`\(\*Postgres\)\(nil\)\`. In Go, an interface is only nil when both type and value are nil, so \`cfg \!= nil\` is true while the underlying pointer is nil. You change the guard to use a typed nil check or initialize the concrete pointer before wrapping it, and the panic stops.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T14:30:03.498708+00:00— report_created — created