Maison > développement back-end > Golang > le corps du texte

Passer la référence de variable à WalkDirFunc

WBOY
Libérer: 2024-02-09 08:39:32
avant
1097 Les gens l'ont consulté

将变量引用传递给 WalkDirFunc

L'éditeur PHP Youzi vous présentera un concept important sur le passage de références de variables : passer une référence de variable à WalkDirFunc. En PHP, le passage de référence de variable est une méthode de transfert qui nous permet de transmettre une référence à une variable à une fonction ou une méthode, modifiant ainsi la variable au sein de la fonction. De cette façon, nous pouvons éviter de créer de nouvelles copies de variables à l’intérieur de la fonction et améliorer l’efficacité d’exécution du code. WalkDirFunc est un exemple de fonction qui peut parcourir tous les fichiers d'un répertoire spécifié et les utiliser. Passer une référence de variable à WalkDirFunc nous permet d'opérer directement sur la variable passée à l'intérieur de la fonction sans renvoyer le résultat modifié. Cette approche est particulièrement utile lors du traitement de grandes quantités de données, réduisant la surcharge de mémoire et améliorant la lisibilité et la maintenabilité du code.

Contenu de la question

J'essaie de parcourir de manière récursive un répertoire donné et de stocker les noms des fichiers trouvés ainsi que leurs tailles dans map[string]uint32 . J'ai trouvé un article décrivant comment utiliser la fonction path/filepath/walkdir et walkdirfunc pour parcourir de manière récursive un répertoire spécifié.

Je suis relativement nouveau et je n'arrive pas à trouver un moyen de transmettre une référence à ma carte à walkdirfunc car sa signature ne spécifie que trois arguments :

func main() {
    args := os.args
    if len(args) != 2 {
        msg := fmt.sprintf("usage: %v <path_to_directory>", args[0])
        log.fatal(msg)
    }

    fullpath := args[1]
    dirmap := make(map[string]uint32)

    filepath.walkdir(fullpath, walk)

}

// how to create parameter accepting &map[string]uint32
func walk(path string, entry fs.direntry, err error) error {
    if err != nil {
        return err
    }

    if !entry.isdir() {
        // add entry and it's size to dirmap

        file, err := os.stat(path)
        if err != nil {
            log.println("error determining file size:", err)
        }

        size := file.size()

        // add path and size to dirmap

    } else if entry.isdir() {
        // recurse here

    } else {
        log.println("unhandled branch:")
        log.println(entry.info())
    }

    return nil
}
Copier après la connexion

Edit : Puisque walk est passé à filepath.walkdir walk是传递给filepath.walkdirwalkdirfunc, il est nécessaire de passer la carte commençant ici. En python, j'utiliserais des paramètres nommés pour y parvenir, mais quelle est la meilleure façon de procéder ?

func main() {
    args := os.Args
    ...

    fullPath := args[1]
    dirMap := make(map[string]uint32)


    // dirMap should be passed here
    filepath.WalkDir(fullPath, walk)

}
Copier après la connexion

La solution

utilise des fermetures. Changer de marche pour :

func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error {
    ...
}
Copier après la connexion

Appelez walkdir comme ceci :

dirMap := make(map[string]uint32)
filepath.WalkDir(fullPath, func(path string, entry fs.DirEntry, err error) error {
    return walk(dirMap, path, entry, err)
})
Copier après la connexion

Exécutez l'exemple ici : https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!