Go语言中%d和%v的输出性能差异。

前言

在利用printf输出时同时用到了%d和%v两个占位符,就突然想知道他们两个的性能差异,于是利用了testing包中的benchmark来对其性能进行了测试。

源代码如下

func BenchmarkFmtD(b *testing.B) {
	for i := 0; i < b.N; i++ {
		fmt.Sprintf("%d", 123456789)
	}
}

func BenchmarkFmtV(b *testing.B) {
	for i := 0; i < b.N; i++ {
		fmt.Sprintf("%v", 123456789)
	}
}

以下是控制台输出结果

PS C:\Users\15037\GolandProjects\new\testing> go test -bench=BenchmarkFmt -benchtime=10s -benchmem
goos: windows
goarch: amd64
pkg: new/testing
cpu: AMD Ryzen 7 6800H with Radeon Graphics
BenchmarkFmtD-16 204133696 58.40 ns/op 16 B/op 1 allocs/op
BenchmarkFmtV-16 205663795 58.88 ns/op 16 B/op 1 allocs/op
PASS
ok new/testing 36.061s

另一次测试

BenchmarkFmtD-16 394344610 60.25 ns/op 16 B/op 1 allocs/op
BenchmarkFmtV-16 399079084 59.85 ns/op 16 B/op 1 allocs/op

分析

在每个函数运行了两亿次和四亿次之后,其平均每次运行的时间分别为58.40纳ns和58.8ns以及60.25ns和59.85ns,其差距很小

结论

%d和%v的性能差距极小,可以忽略,并且在不同的测试条件下优劣也略有差异。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值