Go Programming

Go में कुशल पंक्ति-दर-पंक्ति फ़ाइल रीडिंग

Spread the love

कई Go अनुप्रयोगों के लिए बड़ी फ़ाइलों को कुशलतापूर्वक संसाधित करना महत्वपूर्ण है। संपूर्ण फ़ाइल को मेमोरी में लोड करने के बजाय, लाइन दर लाइन पढ़ना, एक प्रमुख अनुकूलन रणनीति है। यह लेख Go के मानक पुस्तकालय का उपयोग करके इसे कुशलतापूर्वक कैसे प्राप्त किया जाए, इसका विवरण देता है, जिसमें सर्वोत्तम अभ्यास और त्रुटि हैंडलिंग पर ध्यान केंद्रित किया गया है।

विषय-सूची

पैकेज आयात

हम मुख्य रूप से बफ़र्ड 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() कथन सुनिश्चित करता है कि फ़ाइल बंद हो जाएगी, भले ही त्रुटियाँ हों। सूचनात्मक त्रुटि संदेश डिबगिंग में मदद करते हैं।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *