Maison > développement back-end > Golang > Comment puis-je déterminer de manière générique la taille d'une structure Go ?

Comment puis-je déterminer de manière générique la taille d'une structure Go ?

DDD
Libérer: 2024-11-26 07:58:08
original
832 Les gens l'ont consulté

How Can I Generically Determine the Size of Any Go Structure?

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal