You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将一个bytes.Buffer的内容复制到另一个bytes.Buffer中

Go语言两个bytes.Buffer内容复制的最优实现方案

首先需要纠正你的一个认知误区:标准库的bytes.Buffer并非没有实现io.Writer接口,只有指针类型*bytes.Buffer实现了io.Writer、io.Reader接口,值类型不满足接口要求。如果你之前调用时直接传入了bytes.Buffer值而非指针,就会触发接口不匹配的报错,这才是你调用io.Copy、io.CopyBuffer失败的核心原因。

场景1:不需要保留源缓冲区src的原有内容

这种场景直接使用io.Copy即可,注意传参要传两个缓冲区的指针:

import "io"

// dst、src都是*bytes.Buffer类型
_, err := io.Copy(dst, src)

调用完成后src的所有内容会被移动到dst中,src缓冲区变为空。

场景2:需要保留源缓冲区src的原有内容

这种场景下最优实现是直接调用Write方法写入src的底层字节切片,代码最简洁、性能最高,没有额外的中间对象开销:

// 直接拷贝src的所有内容到dst,src内容不会被修改
dst.Write(src.Bytes())

如果你更倾向于使用io标准库的通用拷贝能力,也可以对src的字节切片做一层只读包装后再拷贝,效果完全一致:

import (
    "bytes"
    "io"
)

_, err := io.Copy(dst, bytes.NewReader(src.Bytes()))

内容的提问来源于stack exchange,提问作者pkaramol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:15:07