ホームページ > バックエンド開発 > Golang > 空の構造体と空のインターフェイス: Go ではどちらがより良いマップ値ですか?

空の構造体と空のインターフェイス: Go ではどちらがより良いマップ値ですか?

Susan Sarandon
リリース: 2024-12-01 03:32:13
オリジナル
472 人が閲覧しました

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

マップ値としての空のインターフェイスと空の構造体

Go では、キーと値のペアを格納するためにマップが使用されます。マップの値の型は、インターフェイスや構造体を含む任意の型にすることができます。空のインターフェイスと空の構造体はどちらもマップ内に値が存在しないことを表すために使用できますが、この 2 つにはいくつかの重要な違いがあります。

メモリ使用量

空の構造体のサイズは、アーキテクチャに関係なく、0 バイトに固定されています。一方、空のインターフェイスのサイズは、32 ビット アーキテクチャでは 8 バイト、64 ビット アーキテクチャでは 16 バイトです。これは、値が nil であっても、空のインターフェイスは実際の値へのポインタを格納するためです。

質問で提供されているコード例は、この違いを示しています。

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート