Maison >développement back-end >Golang >Comment fonctionnent les modifications des tableaux transmises aux fonctions dans Go ?

Comment fonctionnent les modifications des tableaux transmises aux fonctions dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 04:57:01251parcourir

How do modifications to arrays passed to functions work in Go?

Modification des tableaux transmis aux fonctions dans Go

Contrairement à certains langages de programmation, Go ne transmet pas implicitement les tableaux par référence. Lorsqu'un tableau est passé à une fonction, seule sa valeur est copiée. Par conséquent, les modifications apportées au tableau passé dans la fonction n'affecteront pas le tableau d'origine.

Cependant, dans Go, les tableaux ne sont pas explicitement déclarés. Au lieu de cela, nous travaillons avec des tranches, qui sont des vues dynamiques et redimensionnables des tableaux sous-jacents. Lorsqu'une tranche est passée à une fonction, seul le descripteur de tranche est copié, qui comprend un pointeur vers le tableau sous-jacent, sa longueur et sa capacité.

En conséquence, toute modification apportée aux éléments de la La tranche au sein de la fonction sera reflétée dans la tranche d'origine, car elles font toutes référence au même tableau sous-jacent.

Considérez l'exemple de code suivant :

<code class="go">func main() {
    tab := []int{1, 2, 3}
    fmt.Println(tab) // [1 2 3]
    reverse(tab)
    fmt.Println(tab) // [3 2 1]
}

func reverse(tab []int) {
    for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 {
        tab[i], tab[j] = tab[j], tab[i]
    }
}</code>

Dans cet exemple, la fonction inverse reçoit un onglet de tranche. Les modifications apportées à l'onglet slice au sein de la fonction, telles que l'échange d'éléments, affecteront la slice d'origine car elles font toutes deux référence au même tableau sous-jacent.

Par conséquent, lorsque vous transmettez un tableau à une fonction dans Go, rappelez-vous que seul le descripteur de tranche est copié. Toute modification apportée aux éléments de la tranche au sein de la fonction sera reflétée dans la tranche d'origine en raison de sa référence au tableau sous-jacent.

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