Ich möchte eine lokale Datei öffnen und eine zurückgeben io.Reader. Der Grund dafür ist, dass ich io.Readereine Bibliothek, die ich verwende, mit einem Feed versehen muss , z.
func read(r io.Reader) (results []string) {
}
Ich möchte eine lokale Datei öffnen und eine zurückgeben io.Reader. Der Grund dafür ist, dass ich io.Readereine Bibliothek, die ich verwende, mit einem Feed versehen muss , z.
func read(r io.Reader) (results []string) {
}
Antworten:
os.Open gibt ein zurück io.Reader
http://play.golang.org/p/BskGT09kxL
package main
import (
"fmt"
"io"
"os"
)
var _ io.Reader = (*os.File)(nil)
func main() {
fmt.Println("Hello, playground")
}
nilZeiger des richtigen Typs, um auf einen zu zeigen os.File. (In diesem Fall können Sie nichts wirklich tun.) Und die var _ io.Reader = (*os.File)(nil)Zuweisung lässt den Compiler prüfen, ob *os.Filees sich um eine handelt io.Reader(oder die Zuweisung wäre nicht gültig). Wenn Sie zum Spielplatz gehen und zu wechseln *os.File, *os.Processwird der Fehler angezeigt, der für Dinge generiert wird, die die Benutzeroberfläche nicht erfüllen.
func (f *File) Read(b []byte) (n int, err error)das genauso wie in Reader.
Verwenden Sie os.Open () :
func Open (Namenszeichenfolge) (Datei * Datei, Fehler)
Öffnen öffnet die benannte Datei zum Lesen. Bei Erfolg können Methoden für die zurückgegebene Datei zum Lesen verwendet werden. Der zugehörige Dateideskriptor hat den Modus O_RDONLY. Wenn ein Fehler auftritt, ist er vom Typ * PathError.
Der zurückgegebene Wert vom Typ *os.Fileimplementiert die io.ReaderSchnittstelle.
Der Typ * os.File implementiert die io.Reader-Schnittstelle, sodass Sie die Datei als Reader zurückgeben können. Ich empfehle Ihnen jedoch, das bufio- Paket zu verwenden, wenn Sie beabsichtigen, große Dateien zu lesen.
file, err := os.Open("path/file.ext")
// if err != nil { ... }
return bufio.NewReader(file)
bufiogroße Dateien empfehlen ?
path/file.ext. Keine andere Antwort formulierte, was os.Filewar.
Hier ist ein Beispiel, in dem wir eine Textdatei öffnen und einen io.Reader aus der zurückgegebenen * os.File-Instanz f erstellen
package main
import (
"io"
"os"
)
func main() {
f, err := os.Open("somefile.txt")
if err != nil {
panic(err)
}
defer f.Close()
var r io.Reader
r = f
}