Modifier une tranche passée à une fonction
Dans Go, les paramètres sont passés par valeur, ce qui signifie que les modifications apportées à une tranche dans un La fonction n’affecte pas la tranche d’origine. Cela peut poser un problème lors de l'utilisation de fonctions récursives, où vous souhaitez modifier la tranche d'accumulateur.
Passer un pointeur sur la tranche
Pour modifier la tranche d'origine, vous peut passer un pointeur vers la tranche en tant que paramètre de fonction. Cela permet à la fonction de modifier la tranche d'origine via le pointeur.
Par exemple :
func myAppend(list *[]string, value string) { *list = append(*list, value) }
Solution mise à jour
Au lieu de passer un pointeur à la tranche, vous pouvez renvoyer la tranche modifiée à partir de la fonction récursive. Cela permet à la fonction d'accumuler les valeurs dans la tranche et de renvoyer le résultat final à l'appelant.
func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) { // ... return validate(v, messages) }
Approche idiomatique
Passer un pointeur vers la tranche ou renvoyer la tranche modifiée sont deux approches idiomatiques dans Go. Le choix de l'approche à utiliser dépend des exigences spécifiques de votre fonction.
Remarque :
Lorsque vous utilisez des pointeurs pour modifier des tranches, il est important de vous assurer que les pointeurs ne sont pas nuls et que les tranches ne sont pas modifiées concomitamment.
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!