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

Übergeben Sie den Variablenverweis an WalkDirFunc

WBOY
WBOYnach vorne
2024-02-09 08:39:321154Durchsuche

将变量引用传递给 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
}

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)

}

Die Lösung

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen