要简单地测试您的代码,您可以使用@Sven 的答案。
要了解一个简单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
}
Run Code Online (Sandbox Code Playgroud)
R
是一种自定义测试类型,io.Reader
通过Read
方法实现接口。因此,它将被 接受NewScanner
。它可以用作:
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())
}
Run Code Online (Sandbox Code Playgroud)
输出:
Line: Test
Line: message
Run Code Online (Sandbox Code Playgroud)
类型R
及其Read
方法都被定义为一个简单的字节源。Scan
调用它的读取器(输入到NewScanner
)Read
方法,直到它得到一个EOF
或一个错误。为简单起见,R
的Read
方法p
在第一次调用时将其数据复制到调用者的缓冲区 ( ) 并EOF
为任何后续调用返回。
请注意, at 行的实际拆分\n
是由scanner.Scan
和 not完成的r.Read
。
您可以修改上述Read
方法以根据您的要求获得自定义行为。
工作示例:https : //play.golang.org/p/zqDoQDIE93
归档时间: |
|
查看次数: |
899 次 |
最近记录: |