Go 的 strings.Builder 实战:拼接性能、Grow 预分配与何时该用 bytes.Buffer
Go 的 strings.Builder 实战:拼接性能、Grow 预分配与何时该用 bytes.BufferGo 里拼字符串,新手第一反应是,循环几万次后 CPU 和内存双双爆表。老手会甩一句「用 strings.Builder」,但很少讲清楚它为什么快、Grow 有什么用、什么时候反而该用 bytes.Buffer。这篇用能跑的代码说明白。为什么 在循环里是灾难Go 的 string 是不可变的。s x每次都要新分配一块内存,把旧内容和新内容拷过去,旧的等着被 GC。循环 N 次就是 O(N²) 的拷贝量:// 反例:每次 都重新分配 拷贝,循环越长越慢funcjoinBad(parts[]string)string{s:for_,p:rangeparts{sp// 每轮生成一个新 string}returns}一万个短字符串就能让它比正确写法慢几十倍,而且制造大量临时垃圾。strings.Builder:一块可扩展的缓冲区strings.Builder内部维护一个[]byte,WriteString直接往后追加,只在容量不够时才扩容,最后String()零拷贝地把 buffer 转成 string:funcjoinGood(parts[]string)string{varb strings.Builderfor_,p:rangeparts{b.WriteString(p)// 追加到内部 []byte,不重新分配整串}returnb.String()// 底层数组直接转 string,不拷贝}String()之所以能零拷贝,是因为 Builder 用了unsafe把[]byte直接转成 string,并且禁止拷贝自身(拷贝会触发 panic,防止两个 Builder 共享同一底层数组)。所以别值传递 Builder,要传就传指针。Grow:提前知道总长度就一次性分配即便有 Builder,如果不预分配,它仍会在扩容时多次 realloc。当你能估算最终长度时,用Grow(n)一次性把容量备好,彻底消灭中途扩容:funcjoinFast(parts[]string)string{total:0for_,p:rangeparts{totallen(p)}varb strings.Builder b.Grow(total)// 一次分配到位,后续 Write 不再扩容for_,p:rangeparts{b.WriteString(p)}returnb.String()}用go test -bench实测,joinFast通常比不 Grow 的版本少一半以上的内存分配次数(allocs/op)。拼接大量数据时,Grow 是性价比最高的一行优化。strings.Builder vs bytes.Buffer 怎么选两者都是可扩展缓冲区,区别在用途:最终要 string,而且只往里写→strings.Builder。它的String()零拷贝,更省。需要读回来(实现 io.Reader)、或要反复 Reset 复用、或最终要 []byte→bytes.Buffer。Builder 没有读接口,Bytes()也没有。// bytes.Buffer 能当 io.Reader/Writer 用,还能 Reset 复用varbuf bytes.Buffer buf.WriteString(hello)io.Copy(os.Stdout,buf)// Builder 做不到:它不是 Reader一句话:纯拼字符串用 Builder,要参与 IO 流或需要读取用 Buffer。注意bytes.Buffer.String()是有拷贝的,别为了「拼个字符串」平白多一次拷贝。一个常被忽略的点:Builder 也能 fmt不想手动拼格式化字符串时,fmt.Fprintf可以直接往 Builder 写,避免生成中间 string:varb strings.Builderfori,p:rangeparts{fmt.Fprintf(b,%d:%s;,i,p)// 直接写进 Builder,无中间字符串}小结循环里是 O(N²) 拷贝,数据量一大就崩;拼字符串默认上strings.Builder。String()零拷贝,但 Builder禁止值拷贝,传参用指针。能估算长度就Grow(total)一次分配到位,实测能砍掉一半以上的allocs/op。选型记忆点:只写、最终要 string 用 Builder;要读回来/复用/输出 []byte 用 bytes.Buffer。

相关新闻

windows11自动更新解决

windows11自动更新解决

目录 一、WinR: 二、找到如下路径: 三、之后新建文件: 四、结果: 一、WinR: 开始操作之前 需知晓 Windows 11 25H2 版本后可能不再适用,以下可参考 输入redegit打开注册表编辑器 二、找到如下路径&am…

2026/8/14 5:58:00 阅读更多 →
深度解析WinFSP:在Windows上打造用户模式文件系统的实战指南

深度解析WinFSP:在Windows上打造用户模式文件系统的实战指南

深度解析WinFSP:在Windows上打造用户模式文件系统的实战指南 【免费下载链接】winfsp Windows File System Proxy - FUSE for Windows 项目地址: https://gitcode.com/gh_mirrors/wi/winfsp Windows 上写文件系统,长期以来是内核程序员才敢碰的领…

2026/8/14 5:58:00 阅读更多 →
如何选择福建的压片糖果代工工厂?

如何选择福建的压片糖果代工工厂?

如何选择福建的压片糖果代工工厂?大家好,我是周夫人,深耕压片糖果领域已经五年了。今天想和大家聊聊如何在福建选择一家靠谱的压片糖果代工工厂。毕竟,选择一个好的合作伙伴对品牌的发展至关重要。行业深度观察压片糖果市场近年来…

2026/8/14 5:56:59 阅读更多 →

最新新闻

数学建模竞赛全流程实战:从MILP模型到Python求解与论文写作

数学建模竞赛全流程实战:从MILP模型到Python求解与论文写作

1. 项目概述:一次完整的数学建模竞赛复盘 去年带队参加华数杯,我们组选的C题,最后拿了个还算不错的名次。比赛结束后,很多学弟学妹来问思路和代码,问得多了,我就想不如系统地整理出来。这不仅仅是一份“答案…

2026/8/14 9:45:46 阅读更多 →
LoongCollector性能稳定性实战:从资源开销到故障容错的深度解析

LoongCollector性能稳定性实战:从资源开销到故障容错的深度解析

1. 从“能用”到“敢用”:一次监控系统选型的真实心路在运维这个行当里,选型监控系统,尤其是日志和指标采集器,从来都不是一件轻松的事。早些年,大家追求的是“能用”——能装上、能跑起来、数据能进到后端&#xff0c…

2026/8/14 9:45:46 阅读更多 →
Harness框架实战:从零构建安全可控的AI Agent系统

Harness框架实战:从零构建安全可控的AI Agent系统

如果你最近在关注AI Agent开发,可能已经感受到了一个明显的矛盾:一方面,各种Agent框架层出不穷,功能强大;另一方面,当你真正想动手搭建一个能处理复杂任务、安全可控的智能体时,却发现教程要么过…

2026/8/14 9:45:46 阅读更多 →
数学建模竞赛:从参考代码到解题思维的深度解析与实践指南

数学建模竞赛:从参考代码到解题思维的深度解析与实践指南

1. 项目概述:从“成品论文”到“解题思路复现”的深度解析看到这个标题,很多初次接触数学建模竞赛的同学可能会眼前一亮:“成品论文”加“可运行代码”,听起来就像拿到了一份可以直接提交的“标准答案”。但作为一名带过多次数学建…

2026/8/14 9:45:46 阅读更多 →
G-Helper无法启动?终极排查清单:5步快速修复华硕笔记本控制工具

G-Helper无法启动?终极排查清单:5步快速修复华硕笔记本控制工具

G-Helper无法启动?终极排查清单:5步快速修复华硕笔记本控制工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, V…

2026/8/14 9:45:46 阅读更多 →
免费开源资源嗅探下载器完整指南:视频号、抖音、小红书素材一键拿全

免费开源资源嗅探下载器完整指南:视频号、抖音、小红书素材一键拿全

免费开源资源嗅探下载器完整指南:视频号、抖音、小红书素材一键拿全 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …

2026/8/14 9:44:44 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →