Rumah >pembangunan bahagian belakang >Golang >Cara membaca fail besar dalam golang dan mencari dengan cepat
Baca fail besar: Gunakan bufio.Reader untuk membaca baris demi baris dan mengoptimumkan penggunaan memori. Carian pantas: Gunakan penapis Bloom untuk carian kebarangkalian dalam masa O(1), atau cincang kandungan fail ke dalam kunci untuk carian pantas menggunakan jadual cincang. . fail besar:
<code class="go">package main import ( "bufio" "fmt" "log" "os" ) func main() { file, err := os.Open("large_file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }</code>
Cari Cepat
Untuk mencari kandungan dalam fail besar dengan cepat, cara yang berkesan ialah menggunakan Bloom Filter atau
Hash Table.
Bloom filter ialah struktur data kebarangkalian yang digunakan untuk menentukan dengan cepat sama ada unsur hadir dalam set. Ia boleh memberikan hasil positif palsu dalam kerumitan masa O(1) tetapi mengelak daripada mengimbas keseluruhan fail. bufio.Reader
,它提供了一个缓冲区,可以在不消耗大量内存的情况下逐行读取文件。以下是使用 bufio.Reader
Jadual cincang ialah struktur data yang membolehkan carian pantas nilai mengikut kunci. Untuk fail besar, anda boleh menggunakan jadual cincang untuk mencincang kandungan fail sebagai kunci dan menyimpan nombor baris atau pengecam lain sebagai nilai.
Berikut ialah contoh penggunaan penapis Bloom untuk carian pantas:<code class="go">package main import ( "bloomfilter" "fmt" "log" "os" ) func main() { // 创建 Bloom 过滤器 bf := bloomfilter.NewBloomFilter(1000000, 8) // 将文件的内容添加到 Bloom 过滤器 file, err := os.Open("large_file.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { bf.AddString(scanner.Text()) } // 检查字符串是否存在于 Bloom 过滤器中 if bf.TestString("target_string") { fmt.Println("字符串存在于文件中") } else { fmt.Println("字符串不存在于文件中") } }</code>
Atas ialah kandungan terperinci Cara membaca fail besar dalam golang dan mencari dengan cepat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!