Maison >développement back-end >Golang >Comment les paramètres de la fonction Golang sont-ils transmis ?

Comment les paramètres de la fonction Golang sont-ils transmis ?

WBOY
WBOYoriginal
2024-06-02 16:57:41358parcourir

Il existe deux manières de transmettre des paramètres de fonction : la transmission de valeurs et la transmission de références. Le passage par valeur copie une copie de la valeur du paramètre et les modifications apportées à la copie n'affectent pas la valeur d'origine. Le passage par référence transmet une référence à la valeur du paramètre et les modifications apportées à la valeur pointée par la référence affecteront la valeur d'origine. Exemple pratique : échangez les éléments de deux tranches de chaîne à l'aide de la fonction swapStringslice() passée par référence.

Comment les paramètres de la fonction Golang sont-ils transmis ?

Passage des paramètres de fonction en Go

Dans le langage Go, les paramètres de fonction peuvent être passés par valeur ou par référence.

Passage par valeur

Passage par valeur signifie passer une copie de la valeur du paramètre à une fonction. Cela signifie que toute modification apportée à la copie du paramètre n'affectera pas la valeur d'origine.

func swap(a, b int) {
    var tmp = a
    a = b
    b = tmp
}

func main() {
    x := 10
    y := 20
    swap(x, y)
    fmt.Printf("x=%d,y=%d\n", x, y) // x=10,y=20
}

Pass by reference

Pass by référence signifie passer une référence à un paramètre à une fonction. Cela signifie que toute modification de la valeur pointée par la référence du paramètre affecte la valeur d'origine.

Pour implémenter le passage de références dans Go, vous devez utiliser des types de pointeurs comme paramètres de fonction.

func swap(a, b *int) {
    var tmp = *a
    *a = *b
    *b = tmp
}

func main() {
    x := 10
    y := 20
    swap(&x, &y) // 注意此处使用指针
    fmt.Printf("x=%d,y=%d\n", x, y) // x=20,y=10
}

Cas pratique

Ce qui suit est un cas pratique utilisant le passage par référence :

Implémentez une swapStringslice() fonction qui échange les éléments de deux tranches de chaîne.

package main

import "fmt"

func swapStringslice(a, b *[]string) {
    var tmp = *a
    *a = *b
    *b = tmp
}

func main() {
    x := []string{"a", "b", "c"}
    y := []string{"d", "e", "f"}
    swapStringslice(&x, &y)
    fmt.Println(x, y) // [d e f] [a b c]
}

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