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
Libérer: 2024-12-01 13:13:11
original
742 Les gens l'ont consulté

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
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal