कई Go अनुप्रयोगों के लिए बड़ी फ़ाइलों को कुशलतापूर्वक संसाधित करना महत्वपूर्ण है। संपूर्ण फ़ाइल को मेमोरी में लोड करने के बजाय, लाइन दर लाइन पढ़ना, एक प्रमुख अनुकूलन रणनीति है। यह लेख Go के मानक पुस्तकालय का उपयोग करके इसे कुशलतापूर्वक कैसे प्राप्त किया जाए, इसका विवरण देता है, जिसमें सर्वोत्तम अभ्यास और त्रुटि हैंडलिंग पर ध्यान केंद्रित किया गया है।
विषय-सूची
- पैकेज आयात
bufio.Scanner
के साथ लाइन-दर-लाइन पढ़ना- पूर्ण उदाहरण
- स्कैनर बफ़र आकार को ट्यून करना
- मज़बूत त्रुटि हैंडलिंग
पैकेज आयात
हम मुख्य रूप से बफ़र्ड I/O के लिए bufio
पैकेज का उपयोग करेंगे, जो कच्चे बाइट-दर-बाइट पढ़ने पर प्रदर्शन में उल्लेखनीय रूप से सुधार करता है। os
पैकेज फ़ाइल संचालन को संभालता है।
import (
"bufio"
"fmt"
"os"
)
bufio.Scanner
के साथ लाइन-दर-लाइन पढ़ना
bufio.Scanner
आदर्श उपकरण है। यह डेटा को चंक्स में पढ़ता है, दक्षता के लिए बफ़रिंग करता है। इसका Scan()
विधि अगली पंक्ति को पुनः प्राप्त करता है, सफलता पर true
और फ़ाइल के अंत में false
देता है।
func processFileLineByLine(filePath string) {
file, err := os.Open(filePath)
if err != nil {
fmt.Printf("फ़ाइल '%s' खोलते समय त्रुटि: %vn", filePath, err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
// प्रत्येक पंक्ति को संसाधित करें (जैसे, fmt.Println(line))
}
if err := scanner.Err(); err != nil {
fmt.Printf("फ़ाइल '%s' पढ़ते समय त्रुटि: %vn", filePath, err)
}
}
पूर्ण उदाहरण
यह उदाहरण my_file.txt
नामक फ़ाइल से लाइनें पढ़ने और संसाधित करने का प्रदर्शन करता है। इस फ़ाइल को उसी निर्देशिका में बनाना याद रखें।
package main
import (
"bufio"
"fmt"
"os"
)
// ... (ऊपर से processFileLineByLine फ़ंक्शन) ...
func main() {
filePath := "my_file.txt"
processFileLineByLine(filePath)
}
स्कैनर बफ़र आकार को ट्यून करना
अत्यधिक बड़ी फ़ाइलों या पंक्तियों के लिए, bufio.Scanner
के बफ़र आकार को scanner.Buffer()
का उपयोग करके समायोजित करें। बड़े बफ़र सिस्टम कॉल को कम करते हैं लेकिन अधिक मेमोरी का उपभोग करते हैं। आपकी फ़ाइल विशेषताओं और उपलब्ध संसाधनों के आधार पर संतुलन खोजें।
scanner := bufio.NewScanner(file)
bufferSize := 1024 * 1024 // 1MB बफ़र
scanner.Buffer(make([]byte, bufferSize), bufferSize)
मज़बूत त्रुटि हैंडलिंग
फ़ाइल खोलने के बाद और स्कैन करने के बाद हमेशा त्रुटियों की जाँच करें। defer file.Close()
कथन सुनिश्चित करता है कि फ़ाइल बंद हो जाएगी, भले ही त्रुटियाँ हों। सूचनात्मक त्रुटि संदेश डिबगिंग में मदद करते हैं।