Go字符串拼接6种方式及其性能测试:strings.builder最快

news2024/11/24 12:48:40

Go字符串拼接常见的方式有加号、fmt.Sprintf、strings.Builder、bytes.Buffer、strings.join、切片。

package concat_string

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
	"testing"
)

const numbers = 100

// +
func BenchmarkStringAdd(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var s string
		for i := 0; i < numbers; i++ {
			s += strconv.Itoa(i)
		}

	}
	b.StopTimer()
}

// fmt.Sprintf
func BenchmarkSprintf(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var s string
		for i := 0; i < numbers; i++ {
			s = fmt.Sprintf("%v%v", s, i)
		}
	}
	b.StopTimer()
}

// strings.Builder
func BenchmarkStringBuilder(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var builder strings.Builder
		for i := 0; i < numbers; i++ {
			builder.WriteString(strconv.Itoa(i))

		}
		_ = builder.String()
	}
	b.StopTimer()
}

// bytes.Buffer
func BenchmarkBytesBuf(b *testing.B) {
	b.ResetTimer()
	for idx := 0; idx < b.N; idx++ {
		var buf bytes.Buffer
		for i := 0; i < numbers; i++ {
			buf.WriteString(strconv.Itoa(i))
		}
		_ = buf.String()
	}
	b.StopTimer()
}

// strings.join
func BenchmarkStringsJoin(b *testing.B) {
	b.ResetTimer()
	var strs []string
	for i := 0; i < b.N; i++ {
		strs = append(strs, strconv.Itoa(i))
	}
	_ = strings.Join(strs, "")
	b.StopTimer()
}

// 切片
func BenchmarkByteSliceString(b *testing.B) {
	b.ResetTimer()
	buf := make([]byte, 0)
	for i := 0; i < b.N; i++ {
		buf = append(buf, byte(i))
	}
	_ = string(buf)
	b.StopTimer()
}

go test -bench=.

1
244851 4725 ns/op 表示单位时间内(默认是1s)被测函数运行了 244851次,每次运行耗时 4725ns
总耗时10.261s。
https://www.cnblogs.com/cheyunhua/p/15769717.html
http://t.zoukankan.com/yahuian-p-go-benchmark.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka安装与配置

1、Java环境为前提 &#xff08;1&#xff09;上传jdk-8u261-linux-x64.rpm到服务器并安装&#xff1a; rpm -ivh jdk-8u261-linux-x64.rpm &#xff08;2&#xff09;配置环境变量&#xff1a; vim /etc/profile # 生效 source /etc/profile # 验证 java -version 2、Zook…

贝叶斯定理~~概率分布

还是搬来了基础自己学习用哦 ~~ 从最基础的概率论到各种概率分布全面梳理了基本的概率知识与概念&#xff0c;这些概念可能会帮助我们了解机器学习或开拓视野。这些概念是数据科学的核心&#xff0c;并经常出现在各种各样的话题上。重温基础知识总是有益的&#xff0c;这样我们…

适应性哈夫曼编码(Adaptive Huffman coding)

适应性哈夫曼编码适应性哈夫曼编码简介算法示例适应性哈夫曼编码 简介 适应性哈夫曼编码&#xff08;Adaptive Huffman coding&#xff09;&#xff0c;又称动态哈夫曼编码&#xff08;Dynamic Huffman coding&#xff09;&#xff0c;是基于哈夫曼编码的适自适应编码技术。它…

深度学习Day07

Recurrent Neural Network 智慧客服——Slot Filling 根据上 下文产生不同的output

Java搭建宝塔部署实战毕设项目WMS仓库管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目WMS仓库管理系统源码。 技术架构 技术框架&#xff1a;SpringMVC Mybatis Ehcache bootstrap jquery mysql5.7运行环境&#xff1a;jdk8 nginx1.20 tomcat9 In…

基于PSO粒子群算法的MPPT最大功率跟踪Simulink仿真,PSO采用S函数实现

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 MPPT控制器的全称是“最大功率点跟踪”&#xff08;Maximum Power Point Tracking&#xff09;太阳能控制器&#xff0c;是传统太阳能充放电控制器的升级换代产品。MPPT控制器能够实时侦测太阳能…

30岁自学Python转行靠谱吗?

前言 30岁自学Python转行靠谱吗&#xff1f;若啃学习任何时候都不晚&#xff0c;关键是学习完用来做什么。提高工作效率&#xff0c;写些脚本实现自动化办公这些完全没问题。如果学python是为了转开发&#xff0c;建议慎重考虑&#xff0c;程序开发转Python相对容易些&#xf…

[附源码]计算机毕业设计血库管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机网络——运输层【重点】

运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时&…

【SpingBoot拦截器】实现两个接口,配置拦截路径

文章目录SpingBoot拦截器拦截器与过滤器的区别&#xff1a;1.HandlerInterceptor接口2.WebMvcConfigurer接口3.示例&#xff1a;SpingBoot拦截器 【SpringWeb框架中的拦截器作用类似于过滤器&#xff0c;都可以对一个请求进行拦截处理。】 我们可以用拦截器做很多事情&#xf…

使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java项目:SSM企业门户网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台主要用于官网展示&#xff0c;后台主要为管理员管理&#xff0c; 管理员角色包含以下功能&#xff1a; 管理员…

Rook Ceph浅谈

storageclass是最省心的&#xff0c;上面三种删除了容器存储还在 下图是管理员定义pv&#xff0c;用户不知道这些细节 PersistentVolume pv会跟后端的存储rbd对接 用户通过PVC调用PV ,根据10G容量去pv里找相匹配的自动关联 上图就叫 pvc-demo StorageClass 更厉害 管理员…

PostgreSQL 内核可观测性体系

文章目录背景Metricspgstat指标展示指标统计相关的guc 参数pgstat 实现pg_stat_statements基本用法及指标内容pg_stat_statements 实现Trace总结背景 PG 作为一个演讲30多年历史的TP 数据库&#xff0c;其复杂度极高&#xff0c;如果帮助DBA 在线上分析复杂查询的问题或者构建…

Nexus私服(二)

(一) SpringBoot配置Maven发布至Nexus私服 Nexus默认会带有四常用个仓库&#xff0c;maven-central、maven-public、maven-releases、maven-snapshotsmaven-central类型是proxy代理类型&#xff0c;地址是指向maven中央仓库地址https://repo1.maven.org/maven2/maven-releases、…

空间复杂度(Space Complexity)

预计阅读时间&#xff1a;10分钟 一、简介 随着计算机空间的发展&#xff0c;空间复杂度逐渐变得不那么重要了&#xff0c;但它在比赛中仍然存在。 推导方法&#xff1a; 用常数1取代运行时间中的所有加法常数。 在修改后的运行次数函数中&#xff0c;只保留最高阶项。…

[附源码]Python计算机毕业设计Django旅游网的设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2013-2020年全国31省数字经济信息化基础数据

2013-2020年全国31省数字经济信息化基础 1、时间&#xff1a;2013-2020年 2、来源&#xff1a;国家统计J和统计NJ 3、范围&#xff1a;31省 4、指标包括&#xff1a; "光缆线路长度(公里)、移动电话基站&#xff08;万个&#xff09;、信息传输、软件和信息技术服务业…

基于模糊BP神经网络轨迹跟踪(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【VUE Cli脚手架软件安装篇】

目录 1. 搭建开发环境 1.1. 安装Node.js 1.2. 配置npm源 2. 安装VUE Cli 3. 创建第1个VUE CLI工程 3.1. 创建工程 3.2. 启动服务 3.3. 停止服务 3.4. 重启服务 1. 搭建开发环境 1.1. 安装Node.js 首先需要下载Node.js安装包&#xff0c;下载地址可参考&#xff1a;ht…