Go语言中字符串的拼装方法很多,那么问题来了,到底哪家性能好?

下面代码,分别比较了 fmt.Sprintf,string +,strings.Join,bytes.Buffer,方法是循环若干次比较总时间。

在VMWare下的Ubuntu 14.04下运行的结果表明:

  • fmt.Sprintf 和 strings.Join 速度相当
  • string + 比上述二者快一倍
  • bytes.Buffer又比上者快约400-500倍
  • 如果循环内每次都临时声明一个bytes.Buffer来使用,会比持续存在慢50%,但是仍然很快

测试代码如下:

package main

import (
"bytes"
"fmt"
"strings"
"time"
) func benchmarkStringFunction(n int, index int) (d time.Duration) {
v := "ni shuo wo shi bu shi tai wu liao le a?"
var s string
var buf bytes.Buffer t0 := time.Now()
for i := ; i < n; i++ {
switch index {
case : // fmt.Sprintf
s = fmt.Sprintf("%s[%s]", s, v)
case : // string +
s = s + "[" + v + "]"
case : // strings.Join
s = strings.Join([]string{s, "[", v, "]"}, "")
case : // temporary bytes.Buffer
b := bytes.Buffer{}
b.WriteString("[")
b.WriteString(v)
b.WriteString("]")
s = b.String()
case : // stable bytes.Buffer
buf.WriteString("[")
buf.WriteString(v)
buf.WriteString("]")
} if i == n- {
if index == { // for stable bytes.Buffer
s = buf.String()
}
fmt.Println(len(s)) // consume s to avoid compiler optimization
}
}
t1 := time.Now()
d = t1.Sub(t0)
fmt.Printf("time of way(%d)=%v\n", index, d)
return d
} func main() {
k :=
d := []time.Duration{}
for i := ; i < k; i++ {
d[i] = benchmarkStringFunction(, i)
} for i := ; i < k-; i++ {
fmt.Printf("way %d is %6.1f times of way %d\n", i, float32(d[i])/float32(d[k-]), k-)
}
}

其中一次的结果如下:

etworker@ubuntu:~/work/go/test$ go run testBenchmark.go 

time of way()=.199641573s

time of way()=.716669ms

time of way()=.197077483s

time of way()=.277063ms

time of way()=.398864ms
way is 857.6 times of way
way is 406.6 times of way
way is 855.7 times of way
way is 1.6 times of way

[笔记]Go语言的字符串拼装方式性能对比的更多相关文章

  1. [笔记]Go语言写文件几种方式性能对比

    Go语言中写文件有多种方式,这里进行如下几种方式的速度对比: 打开文件,写入内容,关闭文件.如此重复多次 打开文件,写入内容,defer 关闭文件.如此重复多次 打开文件,重复多次写入内容,defer ...

  2. JS中字符串拼装 单双引号的处理 字符转义

    js中可能会用到动态追加元素,可能数据也是从后台传过来的,当然有两种思路, 1.在后台拼装好直接返回; 2.在前台js里面拼装, 如果拼装大量的html时可能单双引号就容易出问题;那么如何解决呢?最近 ...

  3. SNMP学习笔记之Python的netsnmp和pysnmp的性能对比

    0x00 概览 用python获取snmp信息有多个现成的库可以使用,其中比较常用的是netsnmp和pysnmp两个库.网上有较多的关于两个库的例子. 本文重点在于如何并发的获取snmp的数据,即同 ...

  4. JS下高效拼装字符串的几种方法比较与测试代码

    在使用Ajax提交信息时,我可能常常需要拼装一些比较大的字符串通过XmlHttp来完成POST提交.尽管提交这样大的信息的做法看起来并不优雅,但有时我们可能不得不面对这样的需求.那么JavaScrip ...

  5. Yii2查询之where条件拼装

    目录 1 语法 2 哈希格式 3 运算符格式 3.1 对比 3.2 and 3.3 or 3.4 not 3.5 between和not between 3.6 in和not in 3.7 like ...

  6. JS 拼装代码的HTML onClick方法传递字符串

    有时会在JS中拼装HTML代码,这时在HTML中出现的onClick()方法中: 1.出现传递Num型的数据,直接拼装进去即可: 2.可能会出现传递字符串的情况,处理方法比较特殊,如下: a:直接字符 ...

  7. 小程序开发笔记【二】,抽奖结果json数据拼装bug解决

    抽奖结果数据json格式数据拼接bug,如下图,只发布了两个奖项,每个奖项设置2个奖品,但最后拼接数据的时候出现3个奖项 json数据格式如下 "luckyResult":[ { ...

  8. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  9. C语言里字符串的解析

      根据给定的字符串,按照一定规则解析字符串,卡住好几次,这次做个笔记,以供参考 函数名称:   strtok 函数原型:   char *strtok(char *s1, const char *s ...

随机推荐

  1. MySQL集群系列1:2台机器搭建双主集群

    先配置静态IP 2台机器mysql密码一样,最好在同一局域网内,最好在mysql刚安装时就配置好,后面有数据了不好同步. 本文实现了2台机器mysql数据同步成功: 配置my.cnf 先关闭防火墙 s ...

  2. [Buzz Today]2013.08.18

    # Go 语言实现memcached:groupcache memcached作者Brad Fitzpatrick用Go语言重新实现了memcached. groupcache继承了memcached ...

  3. 使用jmeter实现对jar包的调用

    一.前言 在我们测试接口的过程中,可能有时需要用到第三方jar包来生成一些测试数据(如有时需要对参数的输入值使用第三方jar包进行加密操作),涉及到这种的情况,普遍做法是:手动调用jar包获得需要的值 ...

  4. Ubuntu14.4下安装FTP

    今天学习了Ubuntu上安装ftp的实例. 1.window上已经安装wamp(windows + apache + mysql + php) 2.window上已安装VMware Workstati ...

  5. K-Means算法Demo

    简介:本Demo是参照这个网站上的Demo自己用Java实现的.将Java打包为Jar,再将Jar转为exe,源代码及程序Demo下载请点我. K-Means算法简介 我尽量用通俗易懂但不规范的语言来 ...

  6. 配置管理之PackageProvider接口

     PackageProvider的开始 从前面几章中我们了解到了一点:想知道如何加载相关配置文件就必须去找StrutsXmlConfigurationProvider类和XmlConfiguratio ...

  7. ICE新手入门版

    1.ICE是什么?  网络通信引擎ICE(Internet Communications Engine)是Zero C公司的分布式系统开发专家实现的一种新的高性能的面向对象中间件平台.从根本上说, I ...

  8. Xcode删除Project上层group

    本来想在Project下New Group,结果点了New group from selection, 结果在Project上级新建了一个group,邮件菜单中无删除项…… 解决方法: 1,关闭Xco ...

  9. Oracle的聚合函数group by结合CUBE和ROLLUP的使用

    转自:https://docs.oracle.com/cd/E11882_01/server.112/e25554/aggreg.htm#DWHSG8618 CUBE Syntax CUBE appe ...

  10. python之MySQL学习——输出指定条件的结果集

    # 引入pymysql模块 import pymysql as pm # 数据库连接 db = pm.connect(host=",database='task', charset='utf ...