在 Go 中,映射用於儲存鍵值對。映射的值類型可以是任何類型,包括介面或結構。雖然空介面和空結構都可以用來表示映射中沒有值,但兩者之間存在一些關鍵差異。
記憶體使用
無論架構如何,空結構的固定大小均為 0 位元組。另一方面,空介面的大小在 32 位元體系結構上為 8 位元組,在 64 位元體系結構上為 16 位元組。這是因為空接口儲存指向實際值的指針,即使該值為零。
問題中提供的範例程式碼示範了這種差異:
package main import ( "fmt" "unsafe" ) func main() { var s struct{} fmt.Println(unsafe.Sizeof(s)) var i interface{} fmt.Println(unsafe.Sizeof(i)) var b bool fmt.Println(unsafe.Sizeof(b)) }
輸出(32 位元架構的位元組):
0 8 1
輸出(位元組對於64位元架構):
0 16 1
如您所見,空結構體的記憶體開銷為0 字節,而空介面的記憶體開銷為8 位元組(32 位元)或16 位元組(64 位元)。
效能
就效能而言,使用空結構通常比使用空介面更有效。這是因為編譯器可以更有效地最佳化涉及空結構的操作。
結論
根據已對應的值類型在空介面和空結構之間進行選擇根據申請的具體要求。如果記憶體使用是一個問題,空結構是更好的選擇。出於性能原因,空結構也是首選。但是,如果地圖打算與各種值類型一起使用,則空介面可能更合適。
以上是空結構體或空介面:Go 中哪個映射值比較好?的詳細內容。更多資訊請關注PHP中文網其他相關文章!