【发布时间】:2022-12-30 23:56:14
【问题描述】:
我最近发现了这个很酷的界面,io.WriterTo:
我想为一些 JSON 对象实现它。我能够做到这一点:
package calendar
import (
"bytes"
"encoding/json"
"io"
)
type date struct {
Month int
Day int
}
func (d date) WriteTo(w io.Writer) (int64, error) {
buf := new(bytes.Buffer)
err := json.NewEncoder(buf).Encode(d)
if err != nil {
return 0, err
}
return buf.WriteTo(w)
}
但我认为这并不理想,因为它会在发送给 Writer 之前在内存中复制对象。是不是可以直接写,还知道写了多少字节?
【问题讨论】:
-
在您的示例中,您只需委托
bytes.Buffer。就适用性而言,我认为此接口允许您实现自定义方式来编排写入流程。示例:实现缓存并不总是需要计算编码。