Ich möchte eine lokale Datei öffnen und eine zurückgeben io.Reader
. Der Grund dafür ist, dass ich io.Reader
eine 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.Reader
eine 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")
}
nil
Zeiger 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.File
es 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.Process
wird 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.File
implementiert die io.Reader
Schnittstelle.
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)
bufio
große Dateien empfehlen ?
path/file.ext
. Keine andere Antwort formulierte, was os.File
war.
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
}