ホームページ >バックエンド開発 >Golang >変数参照を WalkDirFunc に渡します

変数参照を WalkDirFunc に渡します

WBOY
WBOY転載
2024-02-09 08:39:321151ブラウズ

将变量引用传递给 WalkDirFunc

php エディター Youzi は、変数参照の受け渡し、つまり変数参照を WalkDirFunc に渡すことに関する重要な概念を紹介します。 PHP では、変数参照の受け渡しは、変数への参照を関数またはメソッドに渡して、関数内の変数を変更できるようにする受け渡しメソッドです。このようにして、関数内で変数の新しいコピーを作成することを回避し、コードの実行効率を向上させることができます。 WalkDirFunc は、指定されたディレクトリ内のすべてのファイルを走査して操作できるサンプル関数です。変数参照を WalkDirFunc に渡すと、変更された結果を返さずに、関数内で渡された変数を直接操作できます。このアプローチは、大量のデータを処理する場合に特に役立ち、メモリのオーバーヘッドを削減し、コードの可読性と保守性を向上させます。

質問の内容

指定されたディレクトリを再帰的に繰り返し、見つかったファイルの名前とそのサイズを map[string]uint32 に保存しようとしています。 path/filepath/walkdir 関数と walkdirfunc を使用して、指定したディレクトリを再帰的に移動する方法を説明した記事を見つけました。

私は比較的初心者で、マップへの参照を walkdirfunc に渡す方法が見つかりません。そのシグネチャでは次の 3 つの引数しか指定されていないためです。 リーリー

編集:

walkfilepath.walkdir に渡される walkdirfunc であるため、ここから始まるマップを渡す必要があります。 Python ではこれを実現するために名前付きパラメータを使用しますが、Go では何が最善の方法でしょうか?

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
}

解決策

closureを使用してください。ウォークを に変更します。 リーリー

walkdir を次のように呼び出します:

リーリー

ここで例を実行します:

https://www.php.cn/link/178fde6398864e33aaefae5d2d855f20

以上が変数参照を WalkDirFunc に渡しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。