Go 什么;“写入的字节数”;当我的io.Writer故意不写入所传递的所有字节时,它是否应该返回

Go 什么;“写入的字节数”;当我的io.Writer故意不写入所传递的所有字节时,它是否应该返回,go,Go,我想创建一个实现io.Writer,即Write(p[]字节)(n int,err error)的结构。结构将省略传递给它的某些字节,因此不会实际写入p参数中传递的所有字节。(实际目的并不重要,但可能是忽略前10个写入的字节、忽略第二个字节或其他改变调用方传递给方法的写入字节数的内容) 对于io.Writer的Write方法说明如下(我的重点): Write将len(p)字节从p写入底层数据流。信息技术 返回从p写入的字节数(0成功时,返回len(p) 当您写入/dev/null时,返回您试图“

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

对于
io.Writer
Write
方法说明如下(我的重点):

Write将len(p)字节从p写入底层数据流。信息技术 返回从p写入的字节数(0成功时,返回len(p)

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

我假设在您的情况下,如果您的写入程序无法正确处理发送给它的所有字节,则只应返回n 然后,编写器的文档应该非常清楚地说明哪些数据被写入,哪些数据没有被写入。使用您的函数的人需要知道哪些数据在写入完成后可以检索。

成功后,返回len(p)

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

我假设在您的情况下,如果您的写入程序无法正确处理发送给它的所有字节,则只应返回n
然后,编写器的文档应该非常清楚地说明哪些数据是编写的,哪些数据不是编写的。使用您的函数的人需要知道哪些数据在编写完成后可以检索。

gzip。编写器的目的地比其输入的字节数少,但它仍然报告输入的长度。它是answe响铃“成功处理了多少字节的输入?”而不是“有多少字节到达了目标?”如果您需要以某种方式公开该数字,我建议将其公开在
Writer
接口之外——例如,您的结构公开
OutputByteCount int
或其他内容。这是关于
gzip.Writer
的一个很好的观点。我应该考虑检查它并查看它的功能
gzip。Writer
的目标得到的字节更少但它仍然报告输入的长度。它回答的是“成功处理了多少字节的输入?”而不是“有多少字节到达了目标?”如果您需要以某种方式公开数字,我建议将其公开在
Writer
接口之外——例如,您的结构公开
OutputByteCount int
或其他内容。这是关于
gzip.Writer
的一个好观点。我应该考虑检查一下,看看它的功能是什么
/dev/null
是一个函数吗?我怀疑这是正确的不是你的意思。@KeithThompson首先,我应该注意到,有一段时间我以为你的名字是Ken Thompson,差点心脏病发作。其次,我将更新我的帖子以澄清。我实际上是指源代码中用于/dev/null设备的驱动程序的函数。我相信我现在已经记不清我使用过的次数了阿肯·汤普森。(我们甚至都是灰胡子的Unix黑客。)
/dev/null
是一个函数吗?我怀疑你不是这个意思。@KeithThompson首先,我应该注意到,有一刻我以为你的名字是Ken Thompson,差点心脏病发作。其次,我会更新我的帖子来澄清一下。我实际上是指源代码中用于/dev/null设备的驱动程序的函数。我相信我现在我已经记不清我被误认为肯·汤普森的次数了。(我们甚至都是灰胡子的Unix黑客。)