Maison >développement back-end >Golang >Comment puis-je modifier une tranche passée comme argument de fonction dans Go ?

Comment puis-je modifier une tranche passée comme argument de fonction dans Go ?

DDD
DDDoriginal
2024-12-27 05:10:14546parcourir

How Can I Modify a Slice Passed as a Function Argument in Go?

Passer une tranche en tant qu'argument de fonction et modifier la tranche d'origine

Dans Go, la transmission d'arguments aux fonctions se fait par valeur, ce qui signifie que toute modification apportée à l'argument au sein de la fonction ne sont pas reflétés dans la variable d'origine. Cela peut devenir problématique lorsque vous travaillez avec des types de données mutables tels que des tranches, car l'ajout à la tranche dans la fonction n'affectera pas la tranche d'origine au-delà de la portée de la fonction.

Considérez l'exemple suivant :

nums := []int{1, 2, 3}

func addToNumbs(nums []int) []int {
    nums = append(nums, 4)
    fmt.Println(nums) // []int{1, 2, 3, 4}
}

fmt.Println(nums) // []int{1, 2, 3}

Dans cet exemple, la fonction AddToNumbs prend une copie de la tranche numérique et ajoute la valeur 4. Cela modifie uniquement la copie dans la fonction, et la tranche numérique d'origine reste inchangé en dehors de la fonction.

Pour résoudre ce problème, vous devez passer la tranche par référence. Une façon de procéder consiste à passer un pointeur sur la tranche :

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}

En passant un pointeur sur la tranche, toutes les modifications apportées au sein de la fonction sont directement reflétées dans la tranche d'origine. Cependant, passer un pointeur signifie également que la fonction peut modifier la tranche d'une manière inattendue, il est donc important d'utiliser les pointeurs avec précaution.

Une autre alternative consiste à renvoyer la tranche modifiée à partir de la fonction, comme démontré. dans l'exemple suivant :

func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage {
    // Append to the accumulator and return it directly
    messages = append(messages, message)
    return messages
}

Dans ce cas, la fonction de validation renvoie la tranche de messages modifiée, éliminant ainsi le besoin de passer un pointeur vers la tranche.

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