2017-01-09 75 views
0

遞延功能:GoLang:恐慌在無對象的方法呼叫

func PrintPing(req *proto.PingRequest, resp *proto.PingResponse) { 
    fmt.Println("resp:", resp) 
    fmt.Println("resp.GetResult():", resp.GetResult()) 
} 

使用此功能時恐慌後調用respresp.GetResult()是零。

但爲什麼resp.GetResult()也是零呢?控制檯輸出:

resp: <nil> 
resp.GetResult(): <nil> 

這種情況下是否有任何官方定義?

回答

5

我假設你的問題是爲什麼resp.GetResult()調用不會因爲它在一個零實例上被調用而自我恐慌。

這就是go的工作方式,該方法也可以在實例爲nil的類型上調用。只要方法本身不訪問實例,它就可以工作,並且可以實現無實例的行爲。

這有什麼好做延期功能,它也可以模擬在其他情況下:https://play.golang.org/p/qQanhQnIcL

+0

感謝您的回答,Christian。它與C/C++完全不同:P –

1

proto.PingResponse不僅僅是nil但在某些方式輸入nil。在圍棋方面,它是零值

沒有明確的初始值聲明的變量被賦予零值。

如果方法沒有做任何事情可能導致零值出現恐慌,那麼可以訪問類型爲零值的方法並且不會發生恐慌。

+0

感謝您的回答和更清晰的標題:) –

+0

@ Alex.Li,您好。 – I159