我要做的是有io.MultiWriter
写入stdout和字节缓冲区。像这样:
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())
}
我想知道的是,如果我这样做是在射击自己吗?这会为每个插入重新分配数组吗?如果是这样,也许有更好的方法?我是否过早地进行了优化?
答案 0 :(得分:1)
这将是写入字节缓冲区的标准方法。
bytes.Buffer
类型与切片类似。因此,每次进入它的数据超过当前字节片的容量时,内部为字节片的缓冲器会加倍。然后将旧切片中的数据复制到此新切片,然后将新数据附加到该切片上。
此算法平均在恒定时间内执行(摊销),因此不存在重大的性能损失。