Rumah >pembangunan bahagian belakang >Golang >Lulus rujukan pembolehubah kepada WalkDirFunc

Lulus rujukan pembolehubah kepada WalkDirFunc

WBOY
WBOYke hadapan
2024-02-09 08:39:321151semak imbas

将变量引用传递给 WalkDirFunc

Editor PHP Youzi akan memperkenalkan kepada anda konsep penting tentang lulus rujukan berubah - lulus rujukan berubah kepada WalkDirFunc. Dalam PHP, hantaran rujukan pembolehubah ialah kaedah pemindahan yang membolehkan kita menghantar rujukan kepada pembolehubah kepada fungsi atau kaedah, dengan itu mengubah suai pembolehubah dalam fungsi. Dengan cara ini, kita boleh mengelak daripada mencipta salinan baharu pembolehubah di dalam fungsi dan meningkatkan kecekapan pelaksanaan kod. WalkDirFunc ialah fungsi contoh yang boleh melintasi semua fail dalam direktori tertentu dan beroperasi padanya. Meluluskan rujukan pembolehubah kepada WalkDirFunc membolehkan kami beroperasi terus pada pembolehubah yang diluluskan di dalam fungsi tanpa mengembalikan hasil yang diubah suai. Pendekatan ini amat berguna apabila memproses sejumlah besar data, mengurangkan overhed memori dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod.

Kandungan soalan

Saya cuba mengulangi secara rekursif direktori yang diberikan dan menyimpan nama fail yang ditemui bersama-sama saiznya dalam map[string]uint32 . Saya menemui artikel yang menerangkan cara menggunakan fungsi path/filepath/walkdir dan walkdirfunc untuk berjalan secara rekursif pada direktori tertentu.

Saya agak baru untuk pergi dan tidak dapat mencari jalan untuk menghantar rujukan kepada peta saya kepada walkdirfunc kerana tandatangannya hanya menyatakan tiga hujah:

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: Memandangkan walk dihantar ke filepath.walkdir walk是传递给filepath.walkdirwalkdirfunc, peta perlu dilalui bermula di sini. Dalam python saya akan menggunakan parameter bernama untuk mencapai ini, tetapi apakah cara terbaik untuk pergi?

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

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


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

}

Penyelesaian

menggunakan penutupan. Tukar berjalan ke:

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

Panggil walkdir seperti ini:

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

Jalankan contoh di sini: https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20

Atas ialah kandungan terperinci Lulus rujukan pembolehubah kepada WalkDirFunc. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam