Der PHP-Editor Youzi stellt Ihnen ein wichtiges Konzept zur Übergabe von Variablenreferenzen vor – die Übergabe von Variablenreferenzen an WalkDirFunc. In PHP ist die Übergabe von Variablenreferenzen eine Übergabemethode, die es uns ermöglicht, eine Referenz auf eine Variable an eine Funktion oder Methode zu übergeben und so die Variable innerhalb der Funktion zu ändern. Auf diese Weise können wir das Erstellen neuer Kopien von Variablen innerhalb der Funktion vermeiden und die Ausführungseffizienz des Codes verbessern. WalkDirFunc ist eine Beispielfunktion, die alle Dateien in einem angegebenen Verzeichnis durchsuchen und bearbeiten kann. Durch die Übergabe einer Variablenreferenz an WalkDirFunc können wir die übergebene Variable innerhalb der Funktion direkt bearbeiten, ohne das geänderte Ergebnis zurückzugeben. Dieser Ansatz ist besonders nützlich bei der Verarbeitung großer Datenmengen, reduziert den Speicheraufwand und verbessert die Lesbarkeit und Wartbarkeit des Codes.
Ich versuche, ein bestimmtes Verzeichnis rekursiv zu iterieren und die Namen der gefundenen Dateien zusammen mit ihrer Größe in map[string]uint32
zu speichern. Ich habe einen Artikel gefunden, der beschreibt, wie man die Funktion path/filepath/walkdir und walkdirfunc verwendet, um ein bestimmtes Verzeichnis rekursiv zu durchsuchen.
Ich bin relativ neu und finde keine Möglichkeit, einen Verweis auf meine Karte an walkdirfunc
zu übergeben, da deren Signatur nur drei Argumente angibt:
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 }
Bearbeiten: Da walk
an filepath.walkdir
übergeben wird walk
是传递给filepath.walkdir
的walkdirfunc
, ist es notwendig, die Karte ab hier zu übergeben. In Python würde ich benannte Parameter verwenden, um dies zu erreichen, aber was ist der beste Weg?
func main() { args := os.Args ... fullPath := args[1] dirMap := make(map[string]uint32) // dirMap should be passed here filepath.WalkDir(fullPath, walk) }
verwendet Verschlüsse. Gang ändern zu:
func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error { ... }
Rufen Sie walkdir so auf:
dirMap := make(map[string]uint32) filepath.WalkDir(fullPath, func(path string, entry fs.DirEntry, err error) error { return walk(dirMap, path, entry, err) })
Führen Sie das Beispiel hier aus: https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20
Das obige ist der detaillierte Inhalt vonÜbergeben Sie den Variablenverweis an WalkDirFunc. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!