मुझे एक सरणी में पूर्णांक की एक फ़ाइल पढ़ने की जरूरत है। मैं इसे इस के साथ काम किया है:गोलांग, क्या एक सरणी में पूर्णांक की फ़ाइल पढ़ने का एक बेहतर तरीका है?
package main
import (
"fmt"
"io"
"os"
)
func readFile(filePath string) (numbers []int) {
fd, err := os.Open(filePath)
if err != nil {
panic(fmt.Sprintf("open %s: %v", filePath, err))
}
var line int
for {
_, err := fmt.Fscanf(fd, "%d\n", &line)
if err != nil {
fmt.Println(err)
if err == io.EOF {
return
}
panic(fmt.Sprintf("Scan Failed %s: %v", filePath, err))
}
numbers = append(numbers, line)
}
return
}
func main() {
numbers := readFile("numbers.txt")
fmt.Println(len(numbers))
}
फ़ाइल numbers.txt बस है:
1
2
3
...
ReadFile()
(शायद त्रुटि सौंपने की वजह से) बहुत लंबा लगता है।
क्या फ़ाइल लोड करने के लिए कोई छोटा/अधिक गो मूर्ख तरीका है?
आप 'fd.Close() 'खो रहे हैं। 'Readfile' की पंक्ति दो के रूप में एक 'defer fd.Close()' जोड़ें। – Mostafa
त्रुटि जांच के बाद 'defer fd.Close()' रखें। फ़ाइल पढ़ने में असफल होने पर आपको इस लाइन से रनटाइम पैनिक्स मिलेगा क्योंकि एफडी शून्य है। पहले त्रुटि की जांच करें, फिर अपने बंद को स्थगित करें। यदि आप खोलने में विफल रहे तो आपको वैसे भी बंद करने की आवश्यकता नहीं होगी। – burfl
स्पष्टीकरण के लिए, ऐसा इसलिए है क्योंकि डिफर्स का तुरंत मूल्यांकन किया जाता है और बाद में निष्पादित किया जाता है। तो जब आप एक nil fd पर fd.Close() को स्थगित करने का प्रयास करते हैं (जिसमें कोई विधि नहीं है) तो आपको एक दहशत मिल जाएगी। 'एक्स: = 2; fmt.Print (x) defer; एक्स = 3 '2' प्रिंट होगा ', 3. – burfl