Deferred function:
func PrintPing(req *proto.PingRequest, resp *proto.PingResponse) {
fmt.Println("resp:", resp)
fmt.Println("resp.GetResult():", resp.GetResult())
}
When this function is called after a panic, the resp
and resp.GetResult()
is nil.
But why resp.GetResult()
is nil too? The console output:
resp: <nil>
resp.GetResult(): <nil>
Is there any official definition for this case?
I assume your question is why the resp.GetResult() call does not panic itself because it's called on a nil instance.
This is how Go works. The method can be called also on types where the instance is nil. As long as the method itself does not access the instance, it will work and behavior for nil instances can be implemented.
This has nothing to do with deferred functions. It can also be simulated in other contexts: https://play.golang.org/p/qQanhQnIcL