Heim >Backend-Entwicklung >Golang >Wie kann ich die Größe einer beliebigen Datenstruktur in Go ermitteln?

Wie kann ich die Größe einer beliebigen Datenstruktur in Go ermitteln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 13:13:11667Durchsuche

How Can I Get the Size of Any Data Structure in Go?

Generische Funktion zur Bestimmung der Datenstrukturgröße in Go

In Go stellt das Fehlen einer nativen Funktion ähnlich dem Sizeof-Operator von C eine Herausforderung dar beim Abrufen der Größe beliebiger Datenstrukturen. Um dies zu überwinden, bietet die Nutzung von Schnittstellen und Reflexion eine Lösung.

Der bereitgestellte Code versucht, dies zu erreichen, indem er Folgendes verwendet:

package main

import (
    "fmt"
    "reflect"
    "unsafe"
)

func main() {
    type myType struct {
        a int
        b int64
        c float32
        d float64
        e float64
    }
    info := myType{1, 2, 3.0, 4.0, 5.0}
    getSize(info)
}

func getSize(T interface{}) {
    v := reflect.ValueOf(T)
    const size = unsafe.Sizeof(v)
    fmt.Println(size) // Incorrectly produces 12
}

Dieser Ansatz liefert jedoch ein falsches Ergebnis, da er die Größe von berechnet Die Reflect.Value-Struktur und nicht das in der Schnittstelle T gespeicherte Objekt.

Die Lösung liegt in der Verwendung der Size()-Methode von reflektieren.Typ:

size := reflect.TypeOf(T).Size() // Corrects the size calculation

Diese Änderung ermöglicht es der Funktion, die Größe der Eingabedatenstruktur unter Berücksichtigung der Auffüllung genau zu bestimmen. Im angegebenen Beispiel wird die Größe korrekt als 40 angegeben.

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe einer beliebigen Datenstruktur in Go ermitteln?. 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