Maison >développement back-end >Golang >Puis-je modifier des éléments dans des tranches à type affirmé dans Go ?

Puis-je modifier des éléments dans des tranches à type affirmé dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 00:07:18438parcourir

Can I Modify Elements in Type Asserted Slices in Go?

Modification d'éléments dans des tranches à assertion de type

Lorsque vous traitez des tranches dans Go, il est crucial de comprendre les limites de l'assertion de type. Bien que l'assertion de type vous permette d'accéder à la tranche sous-jacente en tant que type spécifique, elle ne vous donne pas la possibilité de modifier directement ses éléments.

Si vous tentez de modifier des éléments en réaffectant une expression comme valeur.([] interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i 1:]...), vous rencontrerez une erreur. En effet, l'assertion de type ne fournit pas de référence à la tranche réelle, mais plutôt une copie. Toutes les modifications que vous apportez à cette copie ne seront pas reflétées dans la tranche d'origine.

Surmonter la limitation

Pour contourner cette limitation, envisagez de stocker un pointeur de tranche au lieu du slice directement dans l’interface. En utilisant un pointeur, vous pouvez accéder et modifier la tranche sans violer l'immuabilité de l'interface.

Par exemple, l'exemple suivant montre comment supprimer avec succès un élément à l'aide d'une assertion de type et d'un pointeur :

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

var value interface{} = &s

// Now do the removal:
sp := value.(*[]interface{})

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

fmt.Println(value)

Dans cet exemple, nous utilisons le type *[]interface{} pour stocker un pointeur vers la tranche dans l'interface de valeur. Lorsque vous accédez à la tranche via *sp, nous travaillons désormais directement avec la tranche d'origine, ce qui nous permet de modifier ses éléments selon nos besoins.

En comprenant les subtilités de l'assertion de type et des pointeurs, vous pouvez manipuler efficacement les tranches même lorsque ils sont enveloppés dans des interfaces, garantissant que votre code Go reste à la fois efficace et sans erreur.

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