我正在使用以下內容來保存結構 - 在很短的時間內很多(資料庫讀取和寫入)。我需要清除緩沖區還是在垃圾收集后立即清除它?
還是應該使用 buffer.Reset()
func ToBytes(p interface{}) []byte {
buf := bytes.Buffer{}
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()
}
uj5u.com熱心網友回復:
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()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409651.html
標籤:
下一篇:如何在Go中將單行代碼拆分為多行
