Maison > développement back-end > Golang > Comment modifier des tranches d'interfaces de type affirmé dans Go ?

Comment modifier des tranches d'interfaces de type affirmé dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-24 22:29:11
original
147 Les gens l'ont consulté

How to Modify Type-Asserted Slices of Interfaces in Go?

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}
Copier après la connexion

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:]...)
Copier après la connexion

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}}
Copier après la connexion

L'utilisation du pointeur nous permet de modifier la tranche sous-jacente :

sp := value[0]
i := 2
*sp = append((*sp)[:i], (*sp)[i+1:]...)
Copier après la connexion

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}]
Copier après la connexion

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!

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