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)) }
Ausgabe (Bytes für 32-Bit-Architektur):
0 8 1
Ausgabe (Bytes für 64-Bit-Architektur):
0 16 1
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!