Maison > développement back-end > Golang > Comment puis-je déterminer par programme la taille d'une structure Go ?

Comment puis-je déterminer par programme la taille d'une structure Go ?

Linda Hamilton
Libérer: 2024-12-18 13:22:25
original
958 Les gens l'ont consulté

How Can I Programmatically Determine the Size of a Go Struct?

Obtention de la taille des structures Go par programmation

Le calcul de la taille d'une structure Go implique de comprendre les types sous-jacents et les exigences d'alignement.

Paquet dangereux Méthode

La méthode Sizeof du package non sécurisé renvoie la taille d'une variable ou d'une structure. Cependant, il est important de noter que cette taille n'inclut pas la mémoire référencée par la variable.

import "unsafe"

func GetStructSize(s interface{}) int {
    return int(unsafe.Sizeof(s))
}
Copier après la connexion

Calcul manuel de la taille de la structure

La taille d'une structure dépend des types de ses champs et l'ordre dans lequel ils apparaissent. Voici quelques directives :

  • Types primitifs : 1 octet (bool, int8, uint8), 2 octets (int16, uint16), 4 octets (int32, uint32, float32), 8 octets (int64, uint64, float64, pointeur).
  • chaîne : 16 octets (deux alignements de 8 octets)
  • tranche : 24 octets (trois alignements de 8 octets)
  • tableau : n * taille de son type d'élément
  • Les champs sont alignés sur leur taille. Si la taille d'un champ n'est pas divisible par son alignement, un remplissage est ajouté.

Par exemple :

type Coord3d struct {
    X, Y, Z int64
}

// Size of Coord3d is 24 bytes (3 * 8 bytes)
Copier après la connexion

Vérification de la taille avec un service en ligne

Vous pouvez vérifiez également votre taille calculée à l'aide d'un service en ligne comme [Go Playground](https://play.golang.org/):

func main() {
    type Coord3d struct {
        X, Y, Z int64
    }
    
    fmt.Println(unsafe.Sizeof(Coord3d{})) // Outputs: 24
}
Copier après la connexion

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