我想做的是有一个 io.MultiWriter 写入标准输出和字节缓冲区。像这样的事情:
package main
import "bytes"
import "fmt"
import "io"
import "os"
func main() {
var b bytes.Buffer
multi := io.MultiWriter(&b, os.Stdout)
fmt.Fprintf(multi, "each of these strings\n")
fmt.Fprintf(multi, "might be large\n")
fmt.Fprintf(multi, "and there are many of them\n")
fmt.Println(b.String())
}
我想知道我这样做是否是在搬起石头砸自己的脚?这是否会为每次插入重新分配数组?如果是这样,也许有更好的方法?我是否过早地进行了优化?
最佳答案
这将是写入字节缓冲区的标准方法。
bytes.Buffer
类型的增长与 slice 类似。因此,每当进入缓冲区的数据超过当前 byte slice 的容量时,缓冲区(内部是一个 byte slice )就会加倍。然后,将旧 slice 中的数据复制到新 slice ,然后将新数据附加到其中。
该算法平均在恒定时间(摊销)内执行,因此没有重大的性能损失。
关于memory-management - bytes.Buffer 是否执行大量重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356480/