Comment créer une fonction générique pour déterminer la taille de n'importe quelle structure dans Go
L'une des tâches couramment effectuées en programmation consiste à déterminer la taille d'une structure. Dans Go, cela peut être réalisé en utilisant la fonction unsafe.Sizeof. Cependant, créer une fonction générique capable de gérer n'importe quel type de structure est un peu plus difficile.
Problème
Une approche courante pour créer une fonction générique consiste à utiliser des interfaces. et la réflexion. Cependant, l'utilisation de cette approche comme indiqué ci-dessous donne des résultats incorrects :
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) }
Ce code renvoie un résultat incorrect de 12, car il détermine la taille de la structure Reflect.Value au lieu de la structure réelle stockée dans l'interface. .
Solution
Pour résoudre ce problème, utilisez le reflet.Type au lieu de refléter.Value pour obtenir le informations sur la taille. Le type reflex.Type a une méthode Size() qui renvoie la taille du type correspondant :
size := reflect.TypeOf(T).Size()
En utilisant cette approche, le code fournit le résultat correct de 40, en tenant compte du remplissage au sein de la structure.
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!