Maison > Article > développement back-end > Passer la référence de variable à 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.
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 }
Edit : Puisque walk
est passé à filepath.walkdir
walk
是传递给filepath.walkdir
的walkdirfunc
, 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) }
utilise des fermetures. Changer de marche pour :
func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error { ... }
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) })
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!