Edited at

Goで指定ディレクトリをトラバースする方法

More than 5 years have passed since last update.

Goで指定ディレクトリをトラバースには、path/filepathパッケージWalk関数を使うのが簡単です。

Walk関数は第1引数にディレクトリのパスをstringで、第2引数には、ファイルまたはディレクトリが見つかったときに行う関数を渡します。

下記の例は、指定ディレクトリ内のファイル数およびファイルサイズの合計を計算する例です。第2引数で渡している無名関数内にて、FileInfoのIsDir()の結果がfalseであればファイルである、ということで、ファイル数とファイルサイズを取得しています。


main.go

package main

import (
"fmt"
"os"
"path/filepath"
)

func main() {
var size int64
count := 0

err := filepath.Walk("/path/to/count/files", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
count += 1
size += info.Size()
}
return nil
})

if err != nil {
fmt.Println("Error on filepath.Walk : ", err)
} else {
fmt.Printf("%d files, size = %d", count, size)
}

}


Javaな人には、Java 7から導入されたFiles#walkFileTreeをイメージしていただくのがよいかと思います。