Heim > Backend-Entwicklung > Golang > Wie kann ich die Größe einer Go-Struktur programmgesteuert bestimmen?

Wie kann ich die Größe einer Go-Struktur programmgesteuert bestimmen?

Linda Hamilton
Freigeben: 2024-12-18 13:22:25
Original
963 Leute haben es durchsucht

How Can I Programmatically Determine the Size of a Go Struct?

Programmgesteuertes Ermitteln der Größe von Go-Strukturen

Um die Größe einer Go-Struktur zu berechnen, müssen die zugrunde liegenden Typen und die Ausrichtungsanforderungen verstanden werden.

Unsicheres Paket Methode

Die Sizeof-Methode aus dem unsicheren Paket gibt die Größe einer Variablen oder Struktur zurück. Es ist jedoch wichtig zu beachten, dass diese Größe nicht den von der Variablen referenzierten Speicher einschließt.

import "unsafe"

func GetStructSize(s interface{}) int {
    return int(unsafe.Sizeof(s))
}
Nach dem Login kopieren

Strukturgröße manuell berechnen

Die Größe einer Struktur hängt von den Typen ihrer Felder ab die Reihenfolge, in der sie erscheinen. Hier sind einige Richtlinien:

  • Primitive Typen: 1 Byte (bool, int8, uint8), 2 Bytes (int16, uint16), 4 Bytes (int32, uint32, float32), 8 Bytes (int64, uint64, float64, Zeiger).
  • Zeichenfolge: 16 Bytes (zwei 8-Byte-Ausrichtungen)
  • Slice: 24 Bytes (drei 8-Byte-Ausrichtungen)
  • Array: n * Größe seines Elementtyps
  • Felder werden an ihrer Größe ausgerichtet. Wenn die Größe eines Feldes nicht durch seine Ausrichtung teilbar ist, wird Auffüllung hinzugefügt.

Zum Beispiel:

type Coord3d struct {
    X, Y, Z int64
}

// Size of Coord3d is 24 bytes (3 * 8 bytes)
Nach dem Login kopieren

Größe mit einem Onlinedienst überprüfen

Das ist möglich Überprüfen Sie Ihre berechnete Größe auch mit einem Onlinedienst wie [Go Playground](https://play.golang.org/):

func main() {
    type Coord3d struct {
        X, Y, Z int64
    }
    
    fmt.Println(unsafe.Sizeof(Coord3d{})) // Outputs: 24
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe einer Go-Struktur programmgesteuert bestimmen?. 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