Ich habe viele kleine Dateien, ich möchte sie nicht Zeile für Zeile lesen.
Gibt es in Go eine Funktion, die eine ganze Datei in eine Zeichenfolgenvariable einliest?
Verwendung ioutil.ReadFile
:
func ReadFile(filename string) ([]byte, error)
ReadFile liest die nach Dateiname benannte Datei und gibt den Inhalt zurück. Ein erfolgreicher Aufruf gibt err == nil zurück, nicht err == EOF. Da ReadFile die gesamte Datei liest, wird ein EOF aus Read nicht als zu meldender Fehler behandelt.
Sie erhalten eine []byte
statt einer string
. Es kann umgewandelt werden , wenn wirklich notwendig:
s := string(buf)
Wenn Sie nur den Inhalt als möchten
string
, besteht die einfache Lösung darin, dieReadFile
Funktion aus demio/ioutil
Paket zu verwenden. Diese Funktion gibt ein Slice zurück, vonbytes
dem Sie es einfach in ein konvertieren könnenstring
.quelle
Ich denke, das Beste, was Sie tun können, wenn Sie wirklich über die Effizienz der Verkettung all dieser Dateien besorgt sind, ist, sie alle in denselben Byte-Puffer zu kopieren.
Dies öffnet jede Datei, kopiert ihren Inhalt in buf und schließt die Datei. Abhängig von Ihrer Situation müssen Sie es möglicherweise nicht konvertieren. In der letzten Zeile wird lediglich angezeigt, dass buf.Bytes () die gesuchten Daten enthält.
quelle
So habe ich es gemacht:
quelle
Ich bin nicht mit Computer, also schreibe ich einen Entwurf. Sie könnten klar sein, was ich sage.
quelle