首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >巡回练习22:读者,这个问题意味着什么?

巡回练习22:读者,这个问题意味着什么?
EN

Stack Overflow用户
提问于 2015-01-08 11:32:39
回答 5查看 11.9K关注 0票数 26

练习:读者

实现一个读取器类型,它发出ASCII字符'A‘的无限流。

我不明白这个问题,如何发出字符'A'?我应该把这个字符设置到哪个变量中?

以下是我尝试过的:

代码语言:javascript
复制
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..
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-08 11:41:13

啊,我明白XD

我认为最好说:“将[]byte中的所有值重写为'A'‘s”。

代码语言:javascript
复制
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{})
}
票数 56
EN

Stack Overflow用户

发布于 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/aiUyc4UDYi2Callers should treat a return of 0 and nil as indicating that nothing happened;在超时时会失败。

在这方面,这里提供的解决方案https://stackoverflow.com/a/68077578/4466350 return copy(b, "A"), nil确实是正确的。它编写了所需的最小值,并优雅地使用了内置和语法工具,而且它从不返回错误。

票数 3
EN

Stack Overflow用户

发布于 2021-06-22 04:31:27

所谓的答案是,即使没有打字,我也没有用。正如我所做的那样,那条线不会进入b。

代码语言:javascript
复制
func (r MyReader) Read(b []byte) (int,  error) {
    return copy(b, "A"), nil
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27839140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档