为了账号安全,请及时绑定邮箱和手机立即绑定

当我的 io.Writer 有意不写入它传递的所有字节时,它应该返回多少“写入的字节数”

当我的 io.Writer 有意不写入它传递的所有字节时,它应该返回多少“写入的字节数”

Go
尚方宝剑之说 2021-11-08 15:45:06
我想创建一个实现 的结构io.Writer,即Write(p []byte) (n int, err error). 该结构将省略传递给它的某些字节,因此实际上不会写入p参数中传递的所有字节。(实际目的并不重要,但例如可以忽略写入的前 10 个字节、忽略每第二个字节或其他改变调用者传递给方法的字节数的内容)。该文件对io.Writer的Write方法说了这样的(重点煤矿):Write 将 len(p) 个字节从 p 写入底层数据流。它返回从 p (0 <= n <= len(p)) 写入的字节数以及遇到的导致写入提前停止的任何错误。如果 Write 返回 n < len(p) ,则它必须返回非 nil 错误。写入不得修改切片数据,即使是临时修改。我应该返回什么n值?为了遵守文档,成功后我应该返回len(p). 但是,该方法实际上可能没有写入那么多字节,并且返回值将是“错误的”。
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

成功时,返回 len(p)。

写入 /dev/null 时调用函数会返回您尝试向其“写入”的字节数。它实际上从不写入任何内容,但会正确处理发送给它的数据。

我假设在你的情况下,如果你的作者无法正确处理发送给它的所有字节,你应该只返回 n < len(p) 。

然后,您的作者的文档应该非常清楚地说明哪些数据是写的,哪些不是写的。使用您的函数的人需要知道在写入完成后哪些数据将被检索。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信