GoLang:对nil对象方法的调用感到恐慌

Ale*_*.Li 0 go panic

延期功能:

func PrintPing(req *proto.PingRequest, resp *proto.PingResponse) {
    fmt.Println("resp:", resp)
    fmt.Println("resp.GetResult():", resp.GetResult())
}
Run Code Online (Sandbox Code Playgroud)

恐慌之后调用此函数时,respresp.GetResult()为零.

但为什么resp.GetResult()也是零呢?控制台输出:

resp: <nil>
resp.GetResult(): <nil>
Run Code Online (Sandbox Code Playgroud)

这个案子有官方定义吗?

Chr*_*ian 5

我假设你的问题是为什么resp.GetResult()调用不会因为它在nil实例上被调用而引起恐慌.

这是如何工作的,该方法也可以在实例为零的类型上调用.只要方法本身不访问实例,它就可以工作,并且可以实现nil实例的行为.

这与延迟函数无关,也可以在其他上下文中进行模拟:https://play.golang.org/p/qQanhQnIcL