単にあなたがスベンの答え@使用することができ、あなたのコードをテストするには。
例の下に検討し、テストのための簡単なio.Reader
のアイデアを得るために:
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
はRead
方法を持っていることによってio.Reader
インターフェイスを実装のカスタム・テスト・タイプです。従って、それはNewScanner
によって受け入れられるでしょう。バイトの単純な供給源として機能するように定義されている
Line: Test
Line: message
タイプR
両方とそのRead
方法:
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())
}
出力:として使用することができます。 Scan
は、EOF
またはエラーが発生するまで、リーダー(NewScanner
への入力)Read
メソッドを呼び出します。簡単にするため、R
のRead
メソッドは、そのデータを最初の呼び出しで呼び出し元のバッファ(p
)にコピーし、それ以降の呼び出しではEOF
を返します。
\n
の実際の回線分割は、scanner.Scan
で行われ、r.Read
では行われません。
上記のRead
メソッドを変更して、要件に応じてカスタム動作を得ることができます。
の作業例:https://play.golang.org/p/zqDoQDIE93
あなたはstdout' 'に' bufio.NewScanner'を使って何を意味するのですか? 'stdout'を使って新しいスキャナを作成していますか? – abhink
@abhinkはい 'bufio.NewScanner(os.Stdout) ' – Mahoni