基于Go Int转string几种方式性能测试


Posted in Golang onApril 28, 2021

Go语言内置int转string至少有3种方式:

fmt.Sprintf("%d",n)
strconv.Itoa(n)
strconv.FormatInt(n,10)

下面针对这3中方式的性能做一下简单的测试:

package gotest
import (
	"fmt"
	"strconv"
	"testing"
)
func BenchmarkSprintf(b *testing.B) {
	n := 10
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		fmt.Sprintf("%d", n)
	}
}
func BenchmarkItoa(b *testing.B) {
	n := 10
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		strconv.Itoa(n)
	}
}
func BenchmarkFormatInt(b *testing.B) {
	n := int64(10)
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		strconv.FormatInt(n, 10)
	}
}

保存文件为int2string_test.go

执行:

go test -v -bench=. int2string_test.go -benchmem
goos: darwin
goarch: amd64
BenchmarkSprintf-8      20000000               114 ns/op              16 B/op          2 allocs/op
BenchmarkItoa-8         200000000                6.33 ns/op            0 B/op          0 allocs/op
BenchmarkFormatInt-8    300000000                4.10 ns/op            0 B/op          0 allocs/op
PASS
ok      command-line-arguments  5.998s

总体来说,strconv.FormatInt()效率最高,fmt.Sprintf()效率最低

补充:Golang类型转换, 整型转换成字符串,字符串转换成整型

看代码吧~

package main
 
import (
 "fmt"
 "reflect"
 "strconv"
)
 
func main() {
 //字符串转成整型int
 num,err:=strconv.Atoi("123")
 if err!=nil {
  panic(err)
 }
 fmt.Println(num,reflect.TypeOf(num))
 
 //整型转换成字符串
 str:=strconv.Itoa(123)
 fmt.Println(str,reflect.TypeOf(str))
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
Go语言带缓冲的通道实现
Apr 26 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang import自定义包方式
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
Golang之sync.Pool使用详解
May 06 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
Golang原生rpc(rpc服务端源码解读)
Apr 07 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Golang 对es的操作实例
Apr 20 Golang
Golang入门之计时器
May 04 Golang
Go语言中break label与goto label的区别
golang 如何用反射reflect操作结构体
Apr 28 #Golang
golang 生成对应的数据表struct定义操作
Apr 28 #Golang
golang 如何通过反射创建新对象
Apr 28 #Golang
golang 实现两个结构体复制字段
Apr 28 #Golang
go结构体嵌套的切片数组操作
Apr 28 #Golang
golang json数组拼接的实例
Apr 28 #Golang
You might like
php _autoload自动加载类与机制分析
2012/02/10 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
MooTools 1.2介绍
2009/09/14 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python3.x上post发送json数据
2018/03/04 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
介绍一下UNIX启动过程
2013/11/14 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
财务人员个人求职信范文
2013/12/04 职场文书
成品仓管员工作职责
2013/12/29 职场文书
2014年教师节寄语
2014/04/03 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
培训后的感想
2015/08/07 职场文书
高二数学教学反思
2016/02/18 职场文书
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android
mysql查看表结构的三种方法总结
2022/07/07 MySQL