Heim > Backend-Entwicklung > Golang > Übergeben Sie den Variablenverweis an WalkDirFunc

Übergeben Sie den Variablenverweis an WalkDirFunc

WBOY
Freigeben: 2024-02-09 08:39:32
nach vorne
1137 Leute haben es durchsucht

将变量引用传递给 WalkDirFunc

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.

Frageninhalt

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
}
Nach dem Login kopieren

Bearbeiten: Da walk an filepath.walkdir übergeben wird walk是传递给filepath.walkdirwalkdirfunc, 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)

}
Nach dem Login kopieren

Die Lösung

verwendet Verschlüsse. Gang ändern zu:

func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error {
    ...
}
Nach dem Login kopieren

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)
})
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage