什么"写入的字节数"我的io.Writer应该在故意不写入传递的所有字节时返回

时间:2015-09-14 18:26:17

标签: go

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

The documentation说明以下内容(强调我的):

  

写入将p(p)个字节从p写入底层数据流。它   返回从p(0< = n< = len(p))和any中写入的字节数   遇到错误导致写入提前停止。 写必须   如果它返回n<返回非零错误。 LEN(p)的即可。写不得修改   切片数据,甚至是暂时的。

我应该以{{1​​}}值返回什么?为了遵守文档,成功后我应该返回n。但是,该方法实际上可能没有写入那么多字节,并且返回值将是"错误"。

1 个答案:

答案 0 :(得分:3)

成功时,返回len(p)。

写入/ dev / null时function called返回您尝试“写入”它的字节数。它实际上从未写过任何内容,但它正确处理发送给它的数据。

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

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