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!