Suppression d'un élément de tableau de Struct dans Go
Lorsque vous travaillez avec des tableaux de structures dans Go, il peut être nécessaire de supprimer un élément basé sur une condition spécifique. Cependant, tenter de le faire dans une boucle peut entraîner des erreurs « hors de portée ».
Considérons l'exemple suivant :
type Config struct { Applications []Application } // config is initialized from a JSON file config = new(Config) _ = decoder.Decode(&config) for i, application := range config.Applications { if i == 1 { config.Applications = _removeApplication(i, config.Applications) } } func _removeApplication(i int, list []Application) []Application { if i < len(list)-1 { list = append(list[:i], list[i+1:]...) } else { log.Print(list[i].Name) list = list[:i] } return list }
Ce code tente de supprimer le deuxième élément (index 1 ) à partir de la gamme d'applications. Cependant, la suppression d'éléments dans cette boucle, surtout si l'élément actuel est supprimé, peut entraîner une indexation erronée en raison du décalage des positions des éléments après la suppression.
Solution recommandée
Pour éviter les problèmes d'indexation, il est conseillé de boucler dans l'ordre inverse :
for i := len(config.Applications) - 1; i >= 0; i-- { application := config.Applications[i] // Condition to decide if current element has to be deleted: if haveToDelete { config.Applications = append(config.Applications[:i], config.Applications[i+1:]...) } }
Cette boucle descendante garantit que les éléments après celui étant supprimés sont décalés correctement, évitant ainsi tout problème hors plage.
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!