Maison > développement back-end > Golang > Comment une fonction appelée dans Go accède-t-elle aux paramètres de la fonction appelante ?

Comment une fonction appelée dans Go accède-t-elle aux paramètres de la fonction appelante ?

PHPz
Libérer: 2024-02-09 21:15:09
avant
519 Les gens l'ont consulté

Go 中调用的函数如何访问调用函数的参数?

La fonction appelée dans Go peut obtenir les paramètres de la fonction appelante via les paramètres de fonction. Dans Go, les paramètres peuvent être transmis aux fonctions par valeur ou référence, et la fonction peut obtenir la valeur ou le pointeur transmis par l'appelant via les paramètres. Si le paramètre est un type valeur, les opérations à l'intérieur de la fonction seront effectuées sur la copie du paramètre et n'affecteront pas la valeur d'origine transmise par l'appelant. Si le paramètre est de type pointeur, l'opération à l'intérieur de la fonction modifiera la valeur d'origine pointée par le pointeur. De cette manière, les fonctions peuvent accéder et modifier les paramètres de la fonction appelante, permettant ainsi une fonctionnalité plus flexible. Qu'il s'agisse d'un paramètre de type valeur ou de type pointeur, la fonction peut obtenir la valeur ou le pointeur transmis par l'appelant via le paramètre et effectuer les opérations associées à l'intérieur de la fonction.

Contenu de la question

Veuillez vous référer au code de référence https://go.dev/play/p/yig2b6dkcoc (également collé ici) :

Tout comme ce code - l'ordre des arguments n'est pas transmis à la fonction sort.slice(), mais il est bien imprimé dans l'appel à la méthode less() du package de tri.

Quelles sont les propriétés qui permettent cette fonctionnalité ?

package main

import (
    "fmt"
    "sort"
)

func main() {
    order := "abcd"
    s := "bca"
    fmt.Printf("ans: %v\n", customSortString(order, s))
}

func customSortString(order string, s string) string {
    sort.Slice([]byte(s), func(a, b int) bool {
        fmt.Printf("order: %v\n", order) // <------ How does this work? order is not passed to sort.Slice() function. 
        return s[a] < s[b]
    })
    return ""
}
Copier après la connexion

Solution

https://www.php.cn/link/58b7483ba899e0ce4d97ac5eecf6fa99

Les littéraux de fonction sont des closures : ils peuvent référencer des variables définies dans la fonction environnante. Ces variables sont ensuite partagées entre les fonctions environnantes et les littéraux de fonction, et elles persistent tant qu'elles sont accessibles.

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal