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

Wie kann ich mithilfe von Reflection die Größe einer beliebigen Struktur in Go ermitteln?

Mary-Kate Olsen
Freigeben: 2024-11-28 01:40:14
Original
515 Leute haben es durchsucht

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

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage