例如:
for {
myData := <-myChan
buf := new(bytes.Buffer)
encoder := gob.NewEncoder(buf)
err := encoder.Encode(myData)
...
我可以将buf := new(...
放在for循环上方以节省处理器和可能的内存,但这会引起任何问题吗?我看到的示例在循环中有new
。
编辑:对于上述情况,编码器可以超出for循环的位置,那么为什么不这样做(在我所看到的示例中)?
答案 0 :(得分:7)
我希望重用缓冲区:
buf := new(bytes.Buffer)
for {
buf.Reset()
//...
}
答案 1 :(得分:0)
惯用的Go风格是编写尽可能清晰的代码,只要它能在时间和空间限制内解决手头的问题即可。
换句话说,我不会担心这里的效率,因为:
如果您发现分配占用了每次循环迭代的很大一部分,那么@peterSO在下面的答案是一个很好的模式,说明如何通过调用bytes.Buffer
方法来重用Reset
。