Maison >développement back-end >Golang >Comment puis-je attribuer un tableau Go Struct à un tableau d'interface ?
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 {}
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 :
var y []interface{} y = make([]interface{}, len(x)) for i, v := range x { y[i] = v }
var y interface{} y = x
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!