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 關注
- 100 瀏覽
添加回答
舉報