2015-01-07 30 views
2

this blog post撰文指出:Go的界面可以被認爲是一個指針?

結構可以實現界面,當然,所以一般你會 對待這些爲同樣的事情。但是當你處理一個結構時,你可能會通過引用傳遞,其中類型是* myStruct,或者你可能傳遞的值是 ,其中類型只是myStruct。如果 在另一方面,你要處理的事情是「公正」的 界面,你永遠不會有它的指針 - 接口在某種意義上指針 。當你在查看 正在傳遞的代碼時,如果不是結構,而是記住它可能實際上是「一個指針」,它可能會讓你感到困惑。

Go的界面可以被認爲是一個指針?請提供一些例子。

+1

http://stackoverflow.com/a/23148998/6309可以說明包含在接口中的指針。 – VonC

回答

3

這句話很奇怪。我想他想說的是:在指針接收器上的方法清楚地表明該方法可能會修改接收器,因爲方法是在原始結構上調用的,而不是在副本上調用。這清楚地表明「你在這裏工作的指針,這可能會改變原來的!」一旦你將一個結構體包裝在一個接口值中,就會丟失:你可能傳遞接口值的副本,但所有這些副本包裝在同一個結構體中。

+0

另外,將指針傳遞給'interface'類型以避免複製通常是多餘的 - 它已經是一個很小的(雙字)值。如果有幫助,這裏是[Russ Cox關於如何存儲接口值的帖子](http://research.swtch.com/interfaces)和[一個涵蓋其他Go類型用指針實現的答案](http:// stackoverflow .COM /問題/ 23542989 /指針-VS值-in參數和返回值/ 23551970#23551970)。 – twotwotwo

+4

@twotwotwo:正確。人們應該「從不」通過指向「永不」的指針傳遞接口值,直到「必須知道何時必須知道」爲止。 – Volker

相關問題