首頁 > 後端開發 > Golang > 空結構體或空介面:Go 中哪個映射值比較好?

空結構體或空介面:Go 中哪個映射值比較好?

Susan Sarandon
發布: 2024-12-01 03:32:13
原創
465 人瀏覽過

Empty Struct or Empty Interface: Which is the Better Map Value in Go?

空介面與空結構作為映射值

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板