Maison > développement back-end > Golang > Comment supprimer en toute sécurité des éléments d'un tableau de structures dans Go ?

Comment supprimer en toute sécurité des éléments d'un tableau de structures dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-29 22:43:09
original
321 Les gens l'ont consulté

How to Safely Remove Elements from an Array of Structs in Go?

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
}
Copier après la connexion

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:]...)
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal