Pass variable reference to WalkDirFunc
php editor Youzi introduces to you an important concept about variable reference passing - passing the variable reference to WalkDirFunc. In PHP, variable reference passing is a transfer method that allows us to pass a reference to a variable to a function or method, thereby modifying the variable within the function. In this way, we can avoid creating new copies of variables inside the function and improve the execution efficiency of the code. WalkDirFunc is a sample function that can traverse all files in a specified directory and operate on them. Passing a variable reference to WalkDirFunc allows us to operate directly on the passed variable inside the function without returning the modified result. This approach is particularly useful when processing large amounts of data, reducing memory overhead and improving code readability and maintainability.
Question content
I am trying to recursively iterate a given directory and store the names of the found files and their sizes in a map[string]uint32
. I found an article describing how to use the path/filepath/walkdir function and walkdirfunc to recursively walk a specified directory.
I'm relatively new to go and can't find a way to pass a reference to my map to walkdirfunc
since its signature only specifies three arguments:
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: Since walk
is the walkdirfunc
passed to filepath.walkdir
, it is necessary to pass the map starting here. In python I would use named parameters to accomplish this, but what is the best way in go?
func main() { args := os.Args ... fullPath := args[1] dirMap := make(map[string]uint32) // dirMap should be passed here filepath.WalkDir(fullPath, walk) }
Solution
Use closure. Change walk to:
func walk(dirmap map[string]uint32, path string, entry fs.direntry, err error) error { ... }
Call walkdir like this:
dirMap := make(map[string]uint32) filepath.WalkDir(fullPath, func(path string, entry fs.DirEntry, err error) error { return walk(dirMap, path, entry, err) })
Run the example here: https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20
The above is the detailed content of Pass variable reference to WalkDirFunc. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



OpenSSL, as an open source library widely used in secure communications, provides encryption algorithms, keys and certificate management functions. However, there are some known security vulnerabilities in its historical version, some of which are extremely harmful. This article will focus on common vulnerabilities and response measures for OpenSSL in Debian systems. DebianOpenSSL known vulnerabilities: OpenSSL has experienced several serious vulnerabilities, such as: Heart Bleeding Vulnerability (CVE-2014-0160): This vulnerability affects OpenSSL 1.0.1 to 1.0.1f and 1.0.2 to 1.0.2 beta versions. An attacker can use this vulnerability to unauthorized read sensitive information on the server, including encryption keys, etc.

The article explains how to use the pprof tool for analyzing Go performance, including enabling profiling, collecting data, and identifying common bottlenecks like CPU and memory issues.Character count: 159

The article discusses writing unit tests in Go, covering best practices, mocking techniques, and tools for efficient test management.

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

Backend learning path: The exploration journey from front-end to back-end As a back-end beginner who transforms from front-end development, you already have the foundation of nodejs,...

The article discusses the go fmt command in Go programming, which formats code to adhere to official style guidelines. It highlights the importance of go fmt for maintaining code consistency, readability, and reducing style debates. Best practices fo

Under the BeegoORM framework, how to specify the database associated with the model? Many Beego projects require multiple databases to be operated simultaneously. When using Beego...
