Heim >Backend-Entwicklung >Golang >Wie kann ich die Größe einer beliebigen Go-Struktur generisch bestimmen?
So erstellen Sie eine generische Funktion zur Bestimmung der Größe einer beliebigen Struktur in Go
Eine der am häufigsten ausgeführten Aufgaben in der Programmierung ist die Bestimmung der Größe einer Struktur. In Go kann dies mit der Funktion unsafe.Sizeof erreicht werden. Allerdings ist das Erstellen einer generischen Funktion, die jede Art von Struktur verarbeiten kann, etwas anspruchsvoller.
Problem
Ein gängiger Ansatz zum Erstellen einer generischen Funktion ist die Verwendung von Schnittstellen und Reflexion. Die Verwendung dieses unten gezeigten Ansatzes führt jedoch zu falschen Ergebnissen:
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) }
Dieser Code gibt ein falsches Ergebnis von 12 zurück, da er die Größe der Reflect.Value-Struktur anstelle der tatsächlichen, in der Schnittstelle gespeicherten Struktur bestimmt .
Lösung
Um dieses Problem zu beheben, verwenden Sie „reflect.Type“ anstelle von „reflect.Value to“. erhalten Sie die Größeninformationen. Der Typ „reflect.Type“ verfügt über eine Size()-Methode, die die Größe des entsprechenden Typs zurückgibt:
size := reflect.TypeOf(T).Size()
Mit diesem Ansatz liefert der Code das korrekte Ergebnis von 40, wobei das Auffüllen innerhalb der Struktur berücksichtigt wird.
Das obige ist der detaillierte Inhalt vonWie kann ich die Größe einer beliebigen Go-Struktur generisch bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!