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

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

DDD
DDDOriginal
2024-11-27 03:07:09838Durchsuche

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

Generische Funktion zum Ermitteln der Strukturgröße in Go

Diese Frage befasst sich mit der Erstellung einer generischen Funktion, die die Größe einer beliebigen Datenstruktur in bestimmt Go, analog zur Sizeof-Funktion von C. Der Entwickler hat versucht, dies mithilfe von Schnittstellen und Reflektion zu erreichen, hat jedoch falsche Ergebnisse erhalten.

Verstehen des Problems

Der bereitgestellte Code berechnet die Größe der Reflect.Value-Struktur und nicht das in der T-Schnittstelle gespeicherte Objekt. Dies wird durch die Verwendung von Reflect.ValueOf(T) verursacht. Um dieses Problem zu beheben, muss mithilfe von „reflect.TypeOf(T).Size()“ die Größe des Typs und nicht der Wert bestimmt werden.

Korrigierter Code:

func getSize(T interface{}) {
    v := reflect.ValueOf(T)
    size := reflect.TypeOf(v).Size()
    fmt.Println(size)
}

Überarbeitete Ausgabe:

Mit dieser Korrektur gibt der Code die erwartete Größe von 40 für die gegebene Struktur zurück, Berücksichtigung der Polsterung.

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