Maison > développement back-end > Golang > Comment puis-je modifier efficacement les tranches passées en arguments dans Go ?

Comment puis-je modifier efficacement les tranches passées en arguments dans Go ?

Patricia Arquette
Libérer: 2024-12-30 18:06:19
original
161 Les gens l'ont consulté

How Can I Effectively Modify Slices Passed as Arguments in Go?

Passez efficacement les tranches dans Go : évitez les limitations de transmission de valeurs

Dans Go, passer une tranche en tant qu'argument de fonction se fait essentiellement par valeur. Cela implique que si une tranche d'argument est modifiée dans la fonction à l'aide de append, cela n'affectera pas la tranche d'origine en dehors de la portée de la fonction.

Pour illustrer cette limitation, considérons 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}
Copier après la connexion

Dans cet exemple, les numéros de tranche d'origine restent inchangés malgré la modification dans la fonction addToNumbs. Pour résoudre ce problème, on peut plutôt passer un pointeur vers la tranche :

func myAppend(list *[]string, value string) {
    *list = append(*list, value)
}
Copier après la connexion

Cette approche garantit que la tranche d'origine est modifiée directement.

Alternativement, dans certains scénarios, renvoyer simplement le la tranche modifiée de la fonction peut être une solution efficace :

func validate(obj Validatable, messages []ValidationMessage) ([]ValidationMessage, error) {
    // Modification...
    return messages, nil
}
Copier après la connexion

En résumé, lors du passage d'une tranche comme argument dans Go, il est crucial de considérer si les modifications dans la fonction doit avoir un impact sur la tranche d'origine. Si tel est le cas, utiliser un pointeur sur la tranche ou renvoyer la tranche modifiée sont des approches efficaces pour obtenir le comportement souhaité.

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