Maison >développement back-end >Golang >Structure vide ou interface vide : quelle est la meilleure valeur de carte dans Go ?

Structure vide ou interface vide : quelle est la meilleure valeur de carte dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 03:32:13527parcourir

Empty Struct or Empty Interface: Which is the Better Map Value in Go?

Interface vide ou structure vide comme valeurs de carte

Dans Go, les cartes sont utilisées pour stocker des paires clé-valeur. Le type de valeur d'une carte peut être n'importe quel type, y compris les interfaces ou les structures. Bien que les interfaces vides et les structures vides puissent toutes deux être utilisées pour représenter l'absence d'une valeur dans une carte, il existe quelques différences clés entre les deux.

Utilisation de la mémoire

Les structures vides ont une taille fixe de 0 octet, quelle que soit l'architecture. En revanche, les interfaces vides ont une taille de 8 octets sur les architectures 32 bits et de 16 octets sur les architectures 64 bits. En effet, les interfaces vides stockent un pointeur vers la valeur réelle, même si cette valeur est nulle.

L'exemple de code fourni dans la question démontre cette différence :

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var s struct{}
    fmt.Println(unsafe.Sizeof(s))
    var i interface{}
    fmt.Println(unsafe.Sizeof(i))
    var b bool
    fmt.Println(unsafe.Sizeof(b))
}

Sortie (octets pour l'architecture 32 bits) :

0
8
1

Sortie (octets pour l'architecture 64 bits) architecture):

0
16
1

Comme vous pouvez le voir, une structure vide a une surcharge de mémoire de 0 octet, tandis qu'une interface vide a une surcharge de 8 octets (32 bits) ou 16 octets ( 64 bits).

Performances

L'utilisation d'une structure vide est généralement plus efficace que d'utiliser une interface vide en termes de performances. En effet, le compilateur peut optimiser plus efficacement les opérations impliquant des structures vides.

Conclusion

Le choix entre une interface vide et une structure vide car le type de valeur d'une carte dépend sur les exigences spécifiques de la demande. Si l'utilisation de la mémoire est un problème, une structure vide est le meilleur choix. Pour des raisons de performances, une structure vide est également préférable. Toutefois, si la carte est destinée à être utilisée avec divers types de valeurs, une interface vide peut être plus appropriée.

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