我为什么不推荐用fmt.Sprintf

本文分析了Golang中不同字符串拼接方法的性能,通过benchmark测试发现,尽管fmt.Sprintf方便,但在性能上不如直接串联。对于字符串数量固定的情况,推荐使用串联;而在字符串数量变化大或数量多的场景,建议使用builder。fmt.Sprintf在占位符多且复杂的情况下仍有一定价值,尤其是在对代码简洁性有要求时。
摘要由CSDN通过智能技术生成

在日常编程中,使用fmt.Sprintf可以非常方便的拼接出字符串,但是你知道吗,人畜无害的fmt.Sprintf竟然是一个性能killer。

在日常的coding中,我们一般会使用以下几种方法去拼接字符串

// 1. + 运算符
str := str1+str2

// 2. fmt.Sprintf
str := fmt.Sprintf("%s %s",str1,str2)

// 3. strings.Builder
builder := strings.Builder{
   }
builder.WirteStirng(str1)
builder.WirteStirng(str2)
str := builder.String()

究竟哪种方法才是最合适的,下面我们将利用benchmark进行性能对比分析

性能分析

构造字符串拼接代码

var str1, str2 = "1", "2"
var strList = []string{
   str1, str2}

// MakeStrWithAdd + 运算符拼接
func MakeStrWithAdd() string {
   
	return str1 + ";" + str2
}

// MakeStrWithFmt fmt拼接
func MakeStrWithFmt() string {
   
	return fmt.Sprintf("%s;%s", str1, str2)
}

// MakeStrWithJoin join拼接
func MakeStrWithJoin() string {
   
	return strings.Join(strList, ";")
}

// MakeStrWithBuilder builder拼接
func MakeStrWithBuilder() string {
   
	var builder strings.Builder
	builder.WriteString(str1)
	builder.WriteString(str2)
	return builder.String()
}

性能分析代码如下

var l = flag.Int("l", 10, "string length")

func TestMain(m *testing.M) {
   
	flag.Parse()
	str1 = string(make(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值