Generische Funktion zum Ermitteln der Größe jeder Struktur in Go
Problem:
Das Ziel ist die Erstellung eine generische Funktion in Go, die die Größe jeder beliebigen Struktur bestimmen kann, ähnlich der sizeof-Funktion in C.
Code und Fehler:
Der bereitgestellte Code verwendet Reflektion, um die Größe der Struktur abzurufen. Allerdings führt die Reflektion über die Struktur „reflect.Value“ statt über das Objekt zu einem falschen Ergebnis. Hier ist der betreffende Code:
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) // Prints 12, which is incorrect }
Lösung:
Um dieses Problem zu lösen, muss man über den Typ und nicht über den Wert des Objekts nachdenken. Reflect.Type verfügt über eine Size()-Methode, die die richtige Größe bereitstellt. Hier ist der aktualisierte Code:
package main import ( "fmt" "reflect" ) 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) size := v.Type().Size() fmt.Println(size) // Prints 40, which is correct }
Erklärung:
Der korrigierte Code verwendet die Size()-Methode von Reflect.Type, die die Größe der Struktur ohne Overhead durch Reflektion zurückgibt .
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection die Größe einer beliebigen Struktur in Go ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!