Chúng ta có thể lấy danh sách các tệp trong một thư mục trên hệ thống tệp bằng các hàm thư viện chuẩn golang khác nhau.
- filepath.Walk
- ioutil.ReadDir
- os.File.Readdir
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
var (
root string
files []string
err error
)
root := "/home/manigandan/golang/samples"
// filepath.Walk
files, err = FilePathWalkDir(root)
if err != nil {
panic(err)
}
// ioutil.ReadDir
files, err = IOReadDir(root)
if err != nil {
panic(err)
}
//os.File.Readdir
files, err = OSReadDir(root)
if err != nil {
panic(err)
}
for _, file := range files {
fmt.Println(file)
}
}
- Sử dụng filepath.Walk
Các path/filepath
gói cung cấp một cách tiện dụng để quét tất cả các tập tin trong một thư mục, nó sẽ tự động quét từng thư mục con trong thư mục.
func FilePathWalkDir(root string) ([]string, error) {
var files []string
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
files = append(files, path)
}
return nil
})
return files, err
}
- Sử dụng ioutil.ReadDir
ioutil.ReadDir
đọc thư mục được đặt tên bởi dirname và trả về một danh sách các mục nhập thư mục được sắp xếp theo tên tệp.
func IOReadDir(root string) ([]string, error) {
var files []string
fileInfo, err := ioutil.ReadDir(root)
if err != nil {
return files, err
}
for _, file := range fileInfo {
files = append(files, file.Name())
}
return files, nil
}
- Sử dụng os.File.Readdir
Readdir đọc nội dung của thư mục được liên kết với tệp và trả về một lát lên đến n giá trị FileInfo, như được trả về bởi Lstat, theo thứ tự thư mục. Các cuộc gọi tiếp theo trên cùng một tệp sẽ mang lại FileInfos hơn nữa.
func OSReadDir(root string) ([]string, error) {
var files []string
f, err := os.Open(root)
if err != nil {
return files, err
}
fileInfo, err := f.Readdir(-1)
f.Close()
if err != nil {
return files, err
}
for _, file := range fileInfo {
files = append(files, file.Name())
}
return files, nil
}
Kết quả điểm chuẩn.
Nhận thêm thông tin chi tiết về bài đăng trên blog này