实现一个读取器类型,它发出ASCII字符'A‘的无限流。
我不明白这个问题,如何发出字符'A'?我应该把这个字符设置到哪个变量中?
以下是我尝试过的:
package main
import "golang.org/x/tour/reader"
type MyReader struct{}
// TODO: Add a Read([]byte) (int, error) method to MyReader.
func main() {
reader.Validate(MyReader{}) // what did this function expect?
}
func (m MyReader) Read(b []byte) (i int, e error) {
b = append(b, 'A') // this is wrong..
return 1, nil // this is also wrong..
}发布于 2015-01-08 11:41:13
啊,我明白XD
我认为最好说:“将[]byte中的所有值重写为'A'‘s”。
package main
import "golang.org/x/tour/reader"
type MyReader struct{}
// TODO: Add a Read([]byte) (int, error) method to MyReader.
func (m MyReader) Read(b []byte) (i int, e error) {
for x := range b {
b[x] = 'A'
}
return len(b), nil
}
func main() {
reader.Validate(MyReader{})
}发布于 2021-09-12 08:04:04
io.Reader.Read角色是用从源读取的数据来写入给定的内存位置。
要实现'A'流,函数必须用'A'值写入给定的内存位置。
它不需要填写输入中提供的整个切片,它可以决定写入输入片的字节数(Read reads up to len(p) bytes into p),它必须返回该数字,以向使用者指示要处理的数据的长度。
按照惯例,io.Reader通过返回io.EOF错误来指示其结束。如果读取器不返回一个错误,它就会作为一个无限的数据来源给它的使用者,它永远无法检测到退出条件。
请注意,对Read的调用(返回0 bytes read )可能会发生,并且不会指示任何特定的内容,使得这个非解决方案https://play.golang.org/p/aiUyc4UDYi2的Callers should treat a return of 0 and nil as indicating that nothing happened;在超时时会失败。
在这方面,这里提供的解决方案https://stackoverflow.com/a/68077578/4466350 return copy(b, "A"), nil确实是正确的。它编写了所需的最小值,并优雅地使用了内置和语法工具,而且它从不返回错误。
发布于 2021-06-22 04:31:27
所谓的答案是,即使没有打字,我也没有用。正如我所做的那样,那条线不会进入b。
func (r MyReader) Read(b []byte) (int, error) {
return copy(b, "A"), nil
}https://stackoverflow.com/questions/27839140
复制相似问题