Masalah:
Menyenaraikan fail dalam direktori dengan bilangan entri yang sangat besar (dalam berbilion-bilion) menggunakan fungsi Go tradisional seperti ioutil.ReadDir atau filepath.Glob menjadi tidak cekap. Fungsi ini mengembalikan kepingan yang diisih, yang boleh menyebabkan keletihan memori.
Penyelesaian:
Daripada bergantung pada kepingan, manfaatkan kaedah Readdir atau Readdirnames dengan bukan sifar n hujah untuk membaca entri direktori dalam kelompok. Ini membolehkan anda memproses aliran objek (atau rentetan) os.FileInfo melalui saluran.
Pelaksanaan:
package main import ( "fmt" "io/ioutil" "os" "path/filepath" ) func main() { // Specify the directory to list. dir := "path/to/directory" // Define a channel to receive file entries. fileEntries := make(chan os.FileInfo) // Start goroutines to read directory entries in batches. for { entries, err := ioutil.ReadDir(dir) if err != nil { fmt.Println(err) continue } if len(entries) == 0 { break } // Send each file entry to the channel. for _, entry := range entries { fileEntries <- entry } } // Process the file entries. for entry := range fileEntries { fmt.Println(entry.Name()) } }
Kelebihan:
Nota:
Atas ialah kandungan terperinci Bagaimana untuk Menyenaraikan Fail dengan Cekap dalam Direktori dengan Berbilion Entri dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!