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!