1 回答
TA贡献1772条经验 获得超8个赞
buf将被 GC 清理,无需调用buf.Reset(). buf.Reset()如果您想buf在已经使用过一次后重复使用,可以使用它。
例如:
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprint(&buf, "Hello")
fmt.Println(buf.String()) // Prints "Hello"
fmt.Fprintln(&buf, " World")
fmt.Println(buf.String()) // Prints "Hello world"
buf.Reset()
fmt.Fprintln(&buf, "Reused!!!")
fmt.Println(buf.String()) // Prints "Reused!!!"
}
我正在使用以下内容来保存结构 - 在短时间内非常多(数据库读写)
如果分配buf结果是一个性能问题,您可以重用buf将其提升到更高的范围并将其作为变量传递。例如:
func main() {
var buf bytes.Buffer
for(...) {
...
ToBytes(someVar, &buf)
...
}
}
func ToBytes(p interface{}, buf *bytes.Buffer) []byte {
buf.Reset()
enc := gob.NewEncoder(buf)
err := enc.Encode(p)
if err != nil {
log.Fatal(err)
}
fmt.Println("uncompressed size (bytes): ", len(buf.Bytes()))
return buf.Bytes()
}
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报