Maison > développement back-end > Golang > Comment supprimer des éléments des tranches d'interface à type affirmé dans Go ?

Comment supprimer des éléments des tranches d'interface à type affirmé dans Go ?

DDD
Libérer: 2024-11-19 10:21:02
original
1018 Les gens l'ont consulté

How to Remove Elements from Type-Asserted Interface Slices in Go?

Assertions de type dans Golang : suppression d'éléments des tranches d'interface

Dans Golang, les assertions de type nous permettent d'extraire le type sous-jacent d'une valeur d'interface . Cependant, après l'assertion de type, comment pouvons-nous manipuler la valeur sous-jacente ?

Considérons l'exemple suivant, qui tente de supprimer un élément d'une tranche d'interfaces dont le type est affirmé :

value := []interface{}{0, "one", "two", 3, 4}
i := 2
value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)
Copier après la connexion

Le le code ci-dessus entraîne l'erreur "Impossible d'attribuer à la valeur ([]interface{})". Cette erreur vient du fait que les interfaces stockent une copie de la valeur sous-jacente et que les assertions de type ne modifient pas la valeur au sein de l'interface.

Solution

Pour modifier la valeur sous-jacente, nous devons plutôt stocker un pointeur vers la tranche dans l’interface. Par exemple :

var value interface{} = &[]interface{}{0, "one", "two", 3, 4}
Copier après la connexion

Maintenant, nous pouvons déréférencer le pointeur et modifier la tranche comme suit :

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

Sortie :

fmt.Println(value) // &[0 one 3 4]
Copier après la connexion

Comme vous pouvez le voir , l'élément à l'index 2 ("deux") a été supprimé de la tranche. Cette approche modifie avec succès la valeur sous-jacente car l'interface stocke un pointeur vers la tranche, plutôt qu'une copie de la tranche elle-même.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal