Heim > Backend-Entwicklung > Golang > Leere Struktur oder leere Schnittstelle: Welcher Kartenwert ist in Go besser?

Leere Struktur oder leere Schnittstelle: Welcher Kartenwert ist in Go besser?

Susan Sarandon
Freigeben: 2024-12-01 03:32:13
Original
467 Leute haben es durchsucht

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

Leere Schnittstelle vs. leere Struktur als Kartenwerte

In Go werden Karten zum Speichern von Schlüssel-Wert-Paaren verwendet. Der Werttyp einer Karte kann ein beliebiger Typ sein, einschließlich Schnittstellen oder Strukturen. Während sowohl leere Schnittstellen als auch leere Strukturen verwendet werden können, um das Fehlen eines Werts in einer Karte darzustellen, gibt es einige wesentliche Unterschiede zwischen den beiden.

Speichernutzung

Leere Strukturen haben unabhängig von der Architektur eine feste Größe von 0 Byte. Leere Schnittstellen hingegen haben eine Größe von 8 Byte auf 32-Bit-Architekturen und 16 Byte auf 64-Bit-Architekturen. Dies liegt daran, dass leere Schnittstellen einen Zeiger auf den tatsächlichen Wert speichern, selbst wenn dieser Wert Null ist.

Der in der Frage bereitgestellte Beispielcode veranschaulicht diesen Unterschied:

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))
}
Nach dem Login kopieren

Ausgabe (Bytes für 32-Bit-Architektur):

0
8
1
Nach dem Login kopieren

Ausgabe (Bytes für 64-Bit-Architektur):

0
16
1
Nach dem Login kopieren

Wie Sie sehen können, hat eine leere Struktur einen Speicher-Overhead von 0 Bytes, während eine leere Schnittstelle einen Overhead von 8 Bytes (32-Bit) hat 16 Bytes (64-Bit).

Leistung

Verwendung eines Leerzeichens struct ist im Hinblick auf die Leistung im Allgemeinen effizienter als die Verwendung einer leeren Schnittstelle. Dies liegt daran, dass der Compiler Vorgänge mit leeren Strukturen effektiver optimieren kann.

Fazit

Die Wahl zwischen einer leeren Schnittstelle und einer leeren Struktur als Werttyp einer Karte hängt davon ab auf die spezifischen Anforderungen der Anwendung. Wenn die Speichernutzung ein Problem darstellt, ist eine leere Struktur die bessere Wahl. Aus Leistungsgründen wird auch eine leere Struktur bevorzugt. Wenn die Karte jedoch mit verschiedenen Werttypen verwendet werden soll, ist eine leere Schnittstelle möglicherweise besser geeignet.

Das obige ist der detaillierte Inhalt vonLeere Struktur oder leere Schnittstelle: Welcher Kartenwert ist in Go besser?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage