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
Linda Hamiltonoriginal
2024-12-18 13:22:251003parcourir

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))
}

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)

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
}

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