Maison  >  Article  >  développement back-end  >  Comment supprimer des éléments d'une tranche d'interfaces à type affirmé dans Go ?

Comment supprimer des éléments d'une tranche d'interfaces à type affirmé dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-27 13:00:11327parcourir

How to Remove Elements from a Type-Asserted Slice of Interfaces in Go?

Suppression d'éléments d'une tranche d'interface à type affirmé

Lorsque vous travaillez avec des tranches d'interfaces dans Go, il peut être nécessaire de supprimer ou de modifier des éléments à l'intérieur eux. Cependant, l'attribution directe à la tranche de type affirmé peut entraîner l'erreur "ne peut pas être attribuée à la valeur.([]interface {})".

Cette erreur se produit car les valeurs d'interface contiennent une copie de la valeur encapsulée, pas une référence à cela. Par conséquent, les tentatives de modification de la valeur de l'interface n'affecteront que la copie et non la tranche d'origine.

Pour supprimer un élément d'une tranche d'interfaces de type affirmé, il faut plutôt stocker un pointeur de tranche dans l'interface. Cela permet de modifier la valeur pointée, qui est la tranche réelle.

Considérons l'exemple suivant :

s := []interface{}{0, "one", "two", 3, 4}

var value interface{} = &s

// Remove the element at index 2 ("two")
sp := value.(*[]interface{})

i := 2
*sp = append((*sp)[:i], (*sp)[i+1:]...)

fmt.Println(value)

Dans ce code, la valeur de l'interface se voit attribuer un pointeur de tranche &s à la place. de la tranche elle-même. L'assertion de type récupère ensuite le pointeur de tranche de l'interface. En modifiant la valeur déréférencée *sp, la tranche d'origine est mise à jour.

La sortie sera &[0 one 3 4], confirmant que "deux" a été supprimé de la tranche. Cette technique permet une modification sûre et efficace des tranches d'interfaces affirmées.

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:
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