Manipulation de tranches d'interfaces à assertion de type dans Go
Dans Golang, l'assertion de type permet aux développeurs d'accéder au type concret sous-jacent d'une valeur d'interface . Cependant, il est important de noter que l’assertion de type ne modifie pas la valeur d’origine de l’interface. Cela peut être problématique lorsque l'on tente de supprimer des éléments d'une tranche d'interfaces dont le type est affirmé.
Considérons l'exemple suivant :
value := []interface{}{0, "one", "two", 3, 4}
Si nous essayons de supprimer un élément de la tranche à l'aide de l'option tapez assertion :
i := 2 value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)
Nous rencontrerons une erreur indiquant "impossible d'attribuer à la valeur (type []interface {})". En effet, l'assertion de type crée une copie de la valeur d'origine et les modifications apportées à la copie n'affectent pas l'original.
Pour résoudre ce problème, il est nécessaire de modifier une tranche sous-jacente d'interfaces plutôt que de taper- copies affirmées. Ceci peut être réalisé en enveloppant la tranche dans un pointeur d'interface :
value := []*[]interface{}{&[]interface{}{0, "one", "two", 3, 4}}
L'utilisation du pointeur nous permet de modifier la tranche sous-jacente :
sp := value[0] i := 2 *sp = append((*sp)[:i], (*sp)[i+1:]...)
Dans ce cas, les modifications apportées à les tranches pointues sont reflétées dans la valeur d'interface d'origine :
fmt.Println(value) // Output: [*[]interface {0 one 3 4}]
En utilisant des pointeurs d'interface, les développeurs peuvent manipuler des tranches d'interfaces de type affirmé sans rencontrer erreurs d'affectation.
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!