go字符串拼接及其效率

279 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

下面罗列一下常见的字符串拼接方式

1、+号拼接

使用+号拼接,和其他语言一样。但是go的字符串是不可变的,会产生临时字符串

s1 := "12"
s2 := "3"
s := s1 + s2

2、fmt.Sprintf()

虽然不会产生临时字符串,但是效率也不高

s1 := "12"
s2 := "3"
s := fmt.Sprintf("%s%s", s1, s2)

3、buffer.WriteString方法

性能大大优于上面两个方法

var s bytes.Buffer
s1 := "12"
s2 := "3"
s.WriteString(s1)
s.WriteString(s2)
fmt.Println(s.String())

4、builder.WriteString方法

builder方法和buffer使用一样, 但是builder设计出来是对buffer的优化,官方建议使用builder方法,效率是最高的

var s strings.Builder
s1 := "12"
s2 := "3"
s.WriteString(s1)
s.WriteString(s2)
fmt.Println(s.String())

5、strings.join()方法,切片的拼接方法

效率也是最高的,这个底层使用了builder方法

s := []string{"1", "b", "c"}
st := strings.Join(s, "@")
fmt.Println(st)

6、总结

效率:

  • 单个拼接: builder > buffer > fmt.Sprintf > +
  • 切片拼接: join