>백엔드 개발 >Golang >WalkDirFunc에 변수 참조 전달

WalkDirFunc에 변수 참조 전달

WBOY
WBOY앞으로
2024-02-09 08:39:321135검색

将变量引用传递给 WalkDirFunc

PHP 편집기 Youzi는 변수 참조 전달, 즉 WalkDirFunc에 변수 참조 전달에 대한 중요한 개념을 소개합니다. PHP에서 변수 참조 전달은 변수에 대한 참조를 함수나 메서드에 전달하여 함수 내의 변수를 수정할 수 있는 전송 방법입니다. 이러한 방식으로 함수 내부에 변수의 새로운 복사본이 생성되는 것을 방지하고 코드의 실행 효율성을 향상시킬 수 있습니다. WalkDirFunc는 지정된 디렉터리의 모든 파일을 탐색하고 해당 파일에서 작업할 수 있는 샘플 함수입니다. WalkDirFunc에 변수 참조를 전달하면 수정된 결과를 반환하지 않고 함수 내부에서 전달된 변수에 대해 직접 작업할 수 있습니다. 이 접근 방식은 대용량 데이터를 처리하고, 메모리 오버헤드를 줄이고, 코드 가독성과 유지 관리성을 향상시킬 때 특히 유용합니다.

질문 내용

주어진 디렉토리를 재귀적으로 반복하고 찾은 파일의 이름과 크기를 map[string]uint32에 저장하려고 합니다. path/filepath/walkdir 함수와 walkdirfunc를 사용하여 지정된 디렉터리를 재귀적으로 탐색하는 방법을 설명하는 기사를 찾았습니다.

저는 비교적 처음이고 지도에 대한 참조를 walkdirfunc에 전달할 방법을 찾을 수 없습니다. 지도의 서명이 세 가지 인수만 지정하기 때문입니다.

으아악

편집: walkfilepath.walkdir walk是传递给filepath.walkdirwalkdirfunc로 전달되므로 여기서부터 지도를 전달해야 합니다. Python에서는 이 작업을 수행하기 위해 명명된 매개 변수를 사용하지만 가장 좋은 방법은 무엇입니까?

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
}

솔루션

클로저를 사용합니다. 걷기를 다음으로 변경:

으아악

walkdir을 다음과 같이 호출하세요:

으아악

여기에서 예제를 실행하세요: https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20

위 내용은 WalkDirFunc에 변수 참조 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제