Golang 拼接字符串的 5 种方法及其效率(下)

本次测试为并发单次拼接,拼接逻辑如下
拼接次数:loop = 5
拼接循环体:hello + hello
3次拼接后结果:hellohello

package main

import (
	"bytes"
	"fmt"
	"strings"
	"time"
)

var loop = 1000000
func main() {
	var s string
	var start time.Time
	concatStr := "hello"

	fmt.Println("loop:", loop)
	s = ""
	// 加号'+' 连接
	start = time.Now()
	for i := 0; i < loop; i++ {
		s = concatStr + concatStr
	}
	//fmt.Println(s)
	fmt.Println("+连接方法:", time.Since(start))

	s = ""
	// append 连接
	start = time.Now()
	for i := 0; i < loop; i++ {
		s = string(append([]byte(concatStr), concatStr...))
	}
	//fmt.Println(s)
	fmt.Println("append方法:", time.Since(start))

	s = ""
	// bytes.WriteString 方法
	start = time.Now()
	for i := 0; i < loop; i++ {
		var buf bytes.Buffer
		buf.WriteString(concatStr)
		buf.WriteString(concatStr)
		s = buf.String()
	}
	//fmt.Println(s)
	fmt.Println("bytes.WriteString 方法", time.Since(start))

	s = ""
	// fmt 方法连接
	start = time.Now()
	for i := 0; i < loop; i++ {
		s = fmt.Sprintf("%s%s", concatStr, concatStr)
	}
	//fmt.Println(s)
	fmt.Println("fmt 方法:", time.Since(start))


	s = ""
	v := []string{concatStr, concatStr}
	// join 方法连接
	start = time.Now()
	for i := 0; i < loop; i++ {
		s = strings.Join(v, "")
	}
	//fmt.Println(s)
	fmt.Println("strings.Join 方法", time.Since(start))
	fmt.Println(s)
}

输出结果

loop: 10
+连接方法: 4.157µs
append方法: 795ns
bytes.WriteString 方法 1.54µs
fmt 方法: 6.074µs
strings.Join 方法 1.297µs

append > strings.Join > bytes.WriteString > + > fmt
====

loop: 100
+连接方法: 10.895µs
append方法: 5.109µs
bytes.WriteString 方法 18.224µs
fmt 方法: 37.039µs
strings.Join 方法 14.453µs

append > + > strings.Join > bytes.WriteString > fmt
====

loop: 1000
+连接方法: 75.182µs
append方法: 35.441µs
bytes.WriteString 方法 172.898µs
fmt 方法: 359.6µs
strings.Join 方法 55.157µs

append > strings.Join > + > bytes.WriteString > fmt
====

loop: 10000
+连接方法: 784.757µs
append方法: 605.657µs
bytes.WriteString 方法 1.583782ms
fmt 方法: 3.466626ms
strings.Join 方法 905.466µs

append > + > strings.Join > bytes.WriteString > fmt
====

loop: 100000
+连接方法: 8.731123ms
append方法: 6.581759ms
bytes.WriteString 方法 14.140889ms
fmt 方法: 38.067318ms
strings.Join 方法 9.721706ms

append > + > strings.Join > bytes.WriteString > fmt
====

loop: 1000000
+连接方法: 85.006355ms
append方法: 49.838182ms
bytes.WriteString 方法 129.771719ms
fmt 方法: 271.532847ms
strings.Join 方法 75.420377ms

append > strings.Join > +  > bytes.WriteString > fmt
====

效率排序:

append > strings.Join ~ + > bytes.WriteString > fmt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值