延期功能:
func PrintPing(req *proto.PingRequest, resp *proto.PingResponse) {
fmt.Println("resp:", resp)
fmt.Println("resp.GetResult():", resp.GetResult())
}
Run Code Online (Sandbox Code Playgroud)
在恐慌之后调用此函数时,resp和resp.GetResult()为零.
但为什么resp.GetResult()也是零呢?控制台输出:
resp: <nil>
resp.GetResult(): <nil>
Run Code Online (Sandbox Code Playgroud)
这个案子有官方定义吗?
我假设你的问题是为什么resp.GetResult()调用不会因为它在nil实例上被调用而引起恐慌.
这是如何工作的,该方法也可以在实例为零的类型上调用.只要方法本身不访问实例,它就可以工作,并且可以实现nil实例的行为.
这与延迟函数无关,也可以在其他上下文中进行模拟:https://play.golang.org/p/qQanhQnIcL