Bir tamsayı dosyasını bir diziye okumam gerekiyor. Ben bu çalışmayı vardır:Golang, bir dizi içine tamsayı bir dosya okumak daha iyi bir yolu var mı?
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))
}
dosya numbers.txt adildir:
1
2
3
...
ReadFile()
(belki hata teslim etme) çok uzun görünüyor.
Dosya yüklemek için daha kısa/daha fazla Go idiomatic yolu var mı?
'fd.Close()' eksiksiniz. 'ReadFile' satır iki olarak bir defer fd.Close() ekleyin. – Mostafa
Hata denetlemesinden sonra 'defer fd.Close()' yerleştirin. Dosya okunamadığı zaman çalışma zamanı paniklerini bu satırdan alacaksınız çünkü fd nil. Önce hatayı kontrol et, sonra kapat. Açamayacak olursanız yine de kapatmak zorunda kalmazsınız. – burfl
Açıklığa kavuşturmak için, bunun sebebi, er ya da geç derhal değerlendirilmekte ve daha sonra icra edilmektedir. Yani fd.Close() bir nil fd (hangi yöntemleri vardır) üzerinde ertelemeye çalıştığınızda bir panik alacaksınız. 'x: = 2; erteleme fmt.Print (x); x = 3 ',' 2 'yazdıracak, değil 3. – burfl