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
Patricia Arquetteoriginal
2024-12-30 18:06:19179parcourir

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}

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)
}

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
}

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!

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