我正在尝试将数组编组成一个字符串,用换行符分隔所有元素。我的内存耗尽,想一个更有效的方法。
buffer := ""
for _, record := range all_data {
body, _ := json.Marshal(record)
buffer += string(body) + "\n" // i run out of memory here
问题:
有没有办法将换行符附加到字节数组?现在我正在通过string(body)
进行投射,但我认为这个操作分配了大量内存(但也许我错了)。
答案 0 :(得分:3)
假设您的数据对于正在运行的计算机而言本身并不太大,问题可能是该字符串的低效构建。相反,您应该使用bytes.buffer
,然后调用它是String()
方法。这是一个例子;
var buffer bytes.Buffer
for _, record := range all_data {
body, _ := json.Marshal(record)
buffer.Write(body)
buffer.WriteString("\n")
}
fmt.Println(buffer.String())
答案 1 :(得分:0)
要添加到evanmcdonnal的答案:您甚至不需要json.Marshal创建的中间缓冲区:
var buf bytes.Buffer
enc := json.NewEncoder(&buf)
for _, record := range allData {
if err := enc.Encode(record); enc != nil {
// handle error
}
buf.WriteString("\n") // optional
}
fmt.Println(buf.String())