在日常编程中,使用
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(