einfach, um Ihren Code zu testen Sie @ Sven Antwort verwenden können.
Um eine Vorstellung von einer einfachen io.Reader
zum Testen bekommen, sollten Sie unter Beispiel:
type R struct {
Data string
done bool
}
func (r *R) Read(p []byte) (n int, err error) {
copy(p, []byte(r.Data))
if r.done {
return 0, io.EOF
}
r.done = true
return len([]byte(r.Data)), nil
}
R
ist ein benutzerdefinierter Testtyp, indem er eine Read
Methode eine io.Reader
Schnittstelle ist zu implementieren. Somit wird es von NewScanner
angenommen.
func NewR(data string) *R {
return &R{data, false}
}
r := NewR("Test\nmessage\n")
scanner := bufio.NewScanner(r)
for scanner.Scan() {
fmt.Printf("Line: %s\n", scanner.Text())
}
Output::
Line: Test
Line: message
sowohl die Art und seine R
Read
Verfahren definiert wurden, als eine einfache Quelle von Bytes arbeiten Es kann als verwendet werden. Scan
ruft seine Reader (Eingang NewScanner
) Read
Methode, bis es eine EOF
oder einen Fehler erhält. Zur Vereinfachung kopiert die R
Methode Read
ihre Daten beim ersten Aufruf in den Puffer des Aufrufers (p
) und gibt bei weiteren Aufrufen eine EOF
zurück.
Beachten Sie, dass das tatsächliche Aufteilen der Zeilen bei \n
durch scanner.Scan
und nicht r.Read
erfolgt.
Sie können die obige Methode Read
ändern, um benutzerdefiniertes Verhalten gemäß Ihren Anforderungen zu erhalten.
Arbeitsbeispiel: https://play.golang.org/p/zqDoQDIE93
Was meinen Sie auf '' stdout' eine bufio.NewScanner' unter Verwendung? Erstellen Sie einen neuen Scanner mit 'stdout'? – abhink
@abhink ja 'bufio.NewScanner (os.Stdout)' – Mahoni