Heim >Backend-Entwicklung >Golang >Wie kann ich die Größe einer beliebigen Datenstruktur in Go ermitteln?
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!