Maison >développement back-end >Golang >Comment puis-je obtenir la taille de n'importe quelle structure de données dans Go ?

Comment puis-je obtenir la taille de n'importe quelle structure de données dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 13:13:11667parcourir

How Can I Get the Size of Any Data Structure in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn