Rumah >pembangunan bahagian belakang >Golang >Lulus rujukan pembolehubah kepada 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.
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.walkdir
的walkdirfunc
, 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) }
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!