2015-07-10 5 views
5

ich eine generische Funktion schreibe, das jede Art von Struktur erhalten und die Rück Größe dieser Struktur, ähnlich wie sizeof Funktion in C-Sprache.generische Funktion Größe jeder Struktur in golang zu bekommen

Ich versuche, dies mit der Schnittstelle und Reflexion zu tun, aber ich bin nicht in der Lage, das richtige Ergebnis zu erhalten. Code ist unter

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 falsches Ergebnis als 12 zurück. Ich bin sehr neu zu Golang, bitte hilf mir dabei.

Antwort

8

Sie erhalten die Größe der reflect.Value Struktur, nicht des Objekts, das in der Schnittstelle T enthalten ist. Glücklicherweise hat reflect.Type eine Size() Methode:

size := reflect.TypeOf(T).Size() 

Das gibt mir 40, die wegen der Polsterung Sinn macht.

+0

danke. Es hat gut funktioniert – sujin

+4

Alternativ können Sie 'unsafe.Sizeof (myType {})' verwenden. – thwd

+0

@thwd Sie haben Recht, aber meine getSize-Funktion muss die Größe jeder Struktur finden, sie muss den Typ der Struktur während der Laufzeit finden. Aus diesem Grund habe ich reflect Paket gewählt – sujin

Verwandte Themen