2015-07-10 15 views
5

C dilinde sizeof işlevine benzer yapıda her türlü almak ve bu yapının büyüklüğü dönmek bir genel işlevi, yazıyorum herhangi yapının büyüklüğünü elde etmek.jenerik fonksiyon golang

Arabirimi ve yansımayı kullanarak bunu yapmaya çalışıyorum ancak doğru sonucu alamıyorum. Kod Ben golang çok yeniyim 12 olarak Bu kod dönüş yanlış sonuç, lütfen bu konuda bana yardımcı

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) 
} 

altındadır.

cevap

8

T arabiriminde bulunan nesnenin değil, reflect.Value yapısının boyutlarını alıyorsunuz.

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

Bu bana 40 verir, çünkü dolgu mantıklı: Neyse ki, reflect.Type bir Size() yöntemi vardır.

+0

teşekkürler. İyi çalıştı – sujin

+4

Alternatif olarak, 'güvensiz.Sizeof (myType {})' kullanabilirsiniz. – thwd

+0

@thwd Haklısınız ama getSize işlevim herhangi bir yapının boyutunu bulmak zorundadır, çalışma süresi sırasında yapı tipini bulmak zorundadır. Bu yüzden yansıttı paketi seçtim – sujin