Suppression d'un élément d'une tranche d'interfaces à assertion de type
Lors de la manipulation d'une valeur de tranche enveloppée dans une interface dans Go, suppression d'un élément directement à partir de la tranche n’est pas possible. Cette opération entraîne l'erreur « Impossible d'attribuer à la valeur » car l'assertion de type crée une copie de la valeur stockée dans l'interface.
L'attribution d'une valeur à une interface dont le type est affirmé ne modifie pas la valeur d'origine stockée dans le interface. Au lieu de cela, cela modifie uniquement la copie obtenue à partir de l’assertion de type. Pour contourner cette limitation, envisagez de stocker un pointeur de tranche dans l'interface (*[]interface{}).
Les types de pointeurs permettent de modifier la valeur pointée plutôt que le pointeur lui-même. Ceci est démontré ci-dessous :
s := []interface{}{0, "one", "two", 3, 4} var value interface{} = &s // Perform removal by accessing the pointed slice sp := value.(*[]interface{}) i := 2 *sp = append((*sp)[:i], (*sp)[i+1:]...) fmt.Println(value)
Sortie :
&[0 one 3 4]
En affirmant le type de l'interface sur un pointeur de tranche ([]interface{}) et en utilisant l'opérateur d'indirection (), on peut modifier directement la valeur de la tranche pointue.
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!