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
949 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!

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