Wenn Sie Möchten Sie tatsächlich einen Dateiinhalt in eine []string
konvertieren, können Sie bufio.Scanner
verwenden, die sauberer (IMO) und effizienter ist als der Code, den Sie gepostet haben:
func readFile(filename string) ([]string, error) {
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
var data []string
for scanner.Scan() {
line := scanner.Text()
data = append(data, line)
}
if err = scanner.Err(); err != nil {
return nil, err
}
return data, nil
}
Hier ist ein Benchmark * die ursprüngliche Funktion zu vergleichen (readFile1
) und meine Funktion (readFile2
):
BenchmarkReadFile1-8 300 4632189 ns/op 3035552 B/op 10570 allocs/op
BenchmarkReadFile2-8 1000 1695820 ns/op 2169655 B/op 10587 allocs/op
* die Benchmark eine Beispieldatei von 1,2 MiB lesen und ~ 10K Linien
Der neue Code wird in 36% der Zeit und 71% des von der ursprünglichen Funktion verwendeten Speichers ausgeführt.
Das konvertiert ein '[] [] Byte nicht in' [] string'. – Krom
@Krom jetzt tut es – syntagma
Ja, aber der Fragesteller fragte, ob das der effizienteste Weg ist, dies zu tun. So ist es? – Krom