Maison >développement back-end >Golang >Comment puis-je obtenir la taille de n'importe quelle structure de données dans Go ?
Fonction générique pour déterminer la taille de la structure de données dans Go
Dans Go, l'absence d'une fonction native similaire à l'opérateur sizeof de C pose un défi lors de la récupération de la taille de structures de données arbitraires. Pour surmonter ce problème, exploiter les interfaces et la réflexion offre une solution.
Le code fourni tente d'y parvenir en utilisant :
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) // Incorrectly produces 12 }
Cependant, cette approche donne un résultat incorrect car elle calcule la taille de la structure Reflect.Value plutôt que l'objet stocké dans l'interface T.
La solution réside dans l'utilisation de la méthode Size() du Reflect.Type :
size := reflect.TypeOf(T).Size() // Corrects the size calculation
Cette modification permet à la fonction de déterminer avec précision la taille de la structure des données d'entrée, en tenant compte du remplissage. Dans l'exemple donné, il indique correctement la taille comme 40.
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!