Go language string efficient concatenation implementation

  • 2020-06-19 10:33:29
  • OfStack

Splicing +.

This splicing is the easiest and easiest for us to use, because it's available in any programming language, like Go, Java, which are + operators that are evaluated at runtime.


var s string
s+=" nickname "+":"+" zhiqiang 1224"+"\n"
s+=" contact QQ"+":"+"354662600"+"\n"
fmt.Println(s)

fmt stitching

This concatenation is done with the help of the fmt.Sprint series functions, which then return the concatenated string.


fmt.Sprint(" nickname ",":"," zhiqiang 1224","\n"," contact QQ",":","354662600")

Join stitching

This is the use of strings. Join function to concatenate, accept an array of strings, converted to a concatenated string.


s:=[]string{" nickname ",":"," zhiqiang 1224","\n"," contact QQ",":","354662600"}
fmt.Println(strings.Join(s,""))

buffer stitching

It USES bytes. Buffer for string concatenation. It is a very flexible structure, which can not only concatenate strings, but also byte,rune and so on.


var b bytes.Buffer
b.WriteString(" nickname ")
b.WriteString(":")
b.WriteString(" zhiqiang 1224")
b.WriteString("\n")
b.WriteString(" contact QQ")
b.WriteString(":")
b.WriteString("354662600")
b.WriteString("\n")
fmt.Println(b.String())

builder stitching

To improve the performance of buffer concatenation, starting with version 1.10 of go, an builder type has been added to improve the performance of string concatenation. Its use is almost the same as buffer.


var b strings.Builder
b.WriteString(" nickname ")
b.WriteString(":")
b.WriteString(" zhiqiang 1224")
b.WriteString("\n")
b.WriteString(" contact QQ")
b.WriteString(":")
b.WriteString("354662600")
b.WriteString("\n")
fmt.Println(b.String())

Reconstruction of splicing function


func StringPlus(p []string) string{
  var s string
  l:=len(p)
  for i:=0;i<l;i++{
   s+=p[i]
  }
  return s
}

func StringFmt(p []interface{}) string{
  return fmt.Sprint(p...)
}

func StringJoin(p []string) string{
  return strings.Join(p,"")
}

func StringBuffer(p []string) string {
  var b bytes.Buffer
  l:=len(p)
  for i:=0;i<l;i++{
   b.WriteString(p[i])
  }
  return b.String()
}

func StringBuilder(p []string) string {
  var b strings.Builder
  l:=len(p)
  for i:=0;i<l;i++{
   b.WriteString(p[i])
  }
  return b.String()
}

Related articles: