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 :
y := make([]interface{}, len(x)) for i, v := range x { y[i] = v }
type IMyStruct struct { MyStruct } func (i IMyStruct) Interface() interface{} { return i.MyStruct } x := []MyStruct{{5}, {6}} y := []interface{}{IMyStruct{x[0]}, IMyStruct{x[1]}}
var y interface{} y = x // No type conversion required
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!