Lulus rujukan pembolehubah kepada WalkDirFunc

WBOY
Lepaskan: 2024-02-09 08:39:32
ke hadapan
1097 orang telah melayarinya

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

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)

}
Salin selepas log masuk

Penyelesaian

menggunakan penutupan. Tukar berjalan ke:

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

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)
})
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!