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
Linda HamiltonOriginal
2024-12-18 13:22:251004Durchsuche

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))
}

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)

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
}

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!

Stellungnahme:
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