Maison > développement back-end > Golang > Comment puis-je attribuer un tableau Go Struct à un tableau d'interface ?

Comment puis-je attribuer un tableau Go Struct à un tableau d'interface ?

DDD
Libérer: 2024-11-30 19:52:16
original
431 Les gens l'ont consulté

How Can I Assign a Go Struct Array to an Interface Array?

L'énigme de l'affectation des tableaux d'interface dans Go

Dans Go, la tentative d'attribuer un tableau de structures directement à un tableau d'interface, comme indiqué ci-dessous, génère une erreur de compilation :

x := []MyStruct{...}
var y []interface{}
y = x // Error: cannot use x as type []interface {}
Copier après la connexion

Cette erreur provient de la différence fondamentale dans la façon dont les types de structures et les interfaces sont stockés en mémoire. Les interfaces sont stockées sous forme de paires de deux mots, comprenant des informations de type et des données, tandis que les types de structure sont stockés sous forme de champs adjacents en mémoire.

Étant donné que ces représentations ne s'alignent pas, la conversion directe entre les deux n'est pas réalisable. Il est nécessaire de copier les éléments individuellement dans la tranche de destination.

Pour résoudre ce problème, envisagez l'une des options suivantes :

  • Tranche d'interfaces : Utilisez une tranche []interface{}, où chaque élément est une interface représentant la structure tapez :
var y []interface{}
y = make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
Copier après la connexion
  • Interface de Struct Slice : Utilisez une variable d'interface{} pour contenir la []MyStruct slice :
var y interface{}
y = x
Copier après la connexion

Dans ce dernier scénario, l'interface contient une référence abstraite à la tranche []MyStruct sous-jacente, permettant une utilisation polymorphe comportement.

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