How to efficiently concatenate strings

In Go, a string is a primitive type, which means it is read-only, and every manipulation of it will create a new string.

So if I want to concatenate strings many times without knowing the length of the resulting string, what’s the best way to do it?

The naive way would be:

s := ""
for i := 0; i < 1000; i++ {
    s += getShortStringFromSomewhere()
return s

but that does not seem very efficient.

From Go 1.10 there is a strings.Builder type, please take a look at this answer for more detail.

Pre-201x answer

The best way is to use the bytes package. It has a Buffer type which implements io.Writer .

package main

import (

func main() {
    var buffer bytes.Buffer

    for i := 0; i < 1000; i++ {


This does it in O(n) time.