Maison > développement back-end > Golang > Comment puis-je attribuer une tranche de structures à une tranche d'interfaces dans Go ?

Comment puis-je attribuer une tranche de structures à une tranche d'interfaces dans Go ?

Susan Sarandon
Libérer: 2024-11-30 19:19:15
original
244 Les gens l'ont consulté

How Can I Assign a Slice of Structs to a Slice of Interfaces in Go?

Attribution d'une tranche de structures à une tranche d'interface

Lorsque vous tentez d'attribuer une tranche de structures ([]MyStruct) à une tranche d'interfaces ( []interface{}), vous pouvez rencontrer une erreur de compilation. En effet, les structures et les interfaces ont des représentations en mémoire différentes.

Les champs des structures sont stockés adjacents en mémoire, tandis que les interfaces sont stockées sous la forme d'une paire de deux mots, un pour les informations de type et un pour les données réelles. Cette différence empêche l'affectation directe.

Solutions possibles :

  • Copier les éléments individuellement : Vous pouvez parcourir manuellement la tranche de structure et copier chaque élément dans l'interface slice.
y := make([]interface{}, len(x))
for i, v := range x {
    y[i] = v
}
Copier après la connexion
  • Utiliser le wrapper d'interface : Vous pouvez créer un type de wrapper qui implémente l'interface interface{} et contient la structure sous-jacente.
type IMyStruct struct {
    MyStruct
}

func (i IMyStruct) Interface() interface{} {
    return i.MyStruct
}

x := []MyStruct{{5}, {6}}
y := []interface{}{IMyStruct{x[0]}, IMyStruct{x[1]}}
Copier après la connexion
  • Utiliser une interface vide : Vous pouvez attribuer la tranche de structures à une interface vide, qui peut contenir des valeurs de tout type.
var y interface{}
y = x // No type conversion required
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