由于類型變量interface{}可以有任何值,這是否意味著它本質上是一個通用指針,如 C 中的 void*?
2 回答

臨摹微笑
TA貢獻1982條經(jīng)驗 獲得超2個贊
雖然 C 的void *
指針和 Go 的interface{}
變量共享可以存儲任意類型的屬性,但有一個很大的區(qū)別:Go 接口變量還存儲它們所持有的值的類型。
因此,雖然希望 C 程序員確保從void *
指針到特定類型的任何強制轉換都是安全的,但 Go 運行時可以檢查任何類型斷言是否正確。
在接口變量中找到的類型信息還允許通過reflect
包進行復雜的運行時自省,這對于普通void *
指針是不可能的。

HUWWW
TA貢獻1874條經(jīng)驗 獲得超12個贊
我傾向于說“一點也不!”。但我承認它可能與“持有任何出現(xiàn)的東西”相同的目的。
An
interface {}
不是指針,因此您無法取消引用它。您可以將 a
void*
強制轉換為任何類型,但類型斷言 aninterface {}
可能會導致運行時恐慌。確定 a
void*
指向的實際類型很復雜(或不可能),但是包反射允許您為interface {}
.
所以不行!interface {}
是空接口,與void*
C 中的a 無關,只有一個小例外,兩者都可能用于處理您不關心它的真實性質的任何事情。
- 2 回答
- 0 關注
- 376 瀏覽
添加回答
舉報
0/150
提交
取消