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

変数参照を WalkDirFunc に渡します

WBOY
リリース: 2024-02-09 08:39:32
転載
1156 人が閲覧しました

将变量引用传递给 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート