猿问

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

我想创建一个实现 的结构io.Writer,即Write(p []byte) (n int, err error). 该结构将省略传递给它的某些字节,因此实际上不会写入p参数中传递的所有字节。(实际目的并不重要,但例如可以忽略写入的前 10 个字节、忽略每第二个字节或其他改变调用者传递给方法的字节数的内容)。

该文件io.WriterWrite方法说了这样的(重点煤矿):

Write 将 len(p) 个字节从 p 写入底层数据流。它返回从 p (0 <= n <= len(p)) 写入的字节数以及遇到的导致写入提前停止的任何错误。如果 Write 返回 n < len(p) ,则它必须返回非 nil 错误。写入不得修改切片数据,即使是临时修改。

我应该返回什么n值?为了遵守文档,成功后我应该返回len(p). 但是,该方法实际上可能没有写入那么多字节,并且返回值将是“错误的”。


尚方宝剑之说
浏览 228回答 1
1回答

忽然笑

成功时,返回 len(p)。写入 /dev/null 时调用的函数会返回您尝试向其“写入”的字节数。它实际上从不写入任何内容,但会正确处理发送给它的数据。我假设在你的情况下,如果你的作者无法正确处理发送给它的所有字节,你应该只返回 n < len(p)&nbsp;。然后,您的作者的文档应该非常清楚地说明哪些数据是写的,哪些不是写的。使用您的函数的人需要知道在写入完成后哪些数据将被检索。
随时随地看视频慕课网APP

相关分类

Go
我要回答