Fonction générique pour obtenir la taille de n'importe quelle structure dans Go
Problème :
Le but est de créer une fonction générique dans Go qui peut déterminer la taille de toute structure arbitraire, similaire à la fonction sizeof dans C.
Code et erreur :
Le code fourni utilise la réflexion pour récupérer la taille de la structure. Cependant, réfléchir sur la structure Reflect.Value, plutôt que de réfléchir sur l'objet, donne un résultat incorrect. Voici le code en question :
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 }
Solution :
Pour résoudre ce problème, il faut réfléchir au type plutôt qu'à la valeur de l'objet. Le reflect.Type a une méthode Size() qui fournit la taille correcte. Voici le code mis à jour :
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 }
Explication :
Le code corrigé utilise la méthode Size() de Reflect.Type, qui renvoie la taille de la structure sans surcharge de réflexion .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!