strings.Builder builds a string through small append-style writes.

builder A builder is useful when code assembles text from several pieces.

Builder Format

name
builder_format.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"strings"
)

func main() {
	var name = "Ada"
	var builder strings.Builder
	builder.WriteString("Hello, ")
	builder.WriteString(name)
	builder.WriteString("!")

	message := builder.String()
	fmt.Println("name=", name)
	fmt.Println("message=", message)
	fmt.Println("length=", len(message))
}
package main

import (
	"fmt"
	"strings"
)

func main() {
	var name = "Grace"
	var builder strings.Builder
	builder.WriteString("Hello, ")
	builder.WriteString(name)
	builder.WriteString("!")

	message := builder.String()
	fmt.Println("name=", name)
	fmt.Println("message=", message)
	fmt.Println("length=", len(message))
}
package main

import (
	"fmt"
	"strings"
)

func main() {
	var name = "Linus"
	var builder strings.Builder
	builder.WriteString("Hello, ")
	builder.WriteString(name)
	builder.WriteString("!")

	message := builder.String()
	fmt.Println("name=", name)
	fmt.Println("message=", message)
	fmt.Println("length=", len(message))
}
  1. name ← "Ada", builder ← strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)}

    8func main() {9  var name→ "Ada" = "Ada" //@name="Grace", "Linus"10  var builder→ strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)} strings.Builder11  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20}}.WriteString("Hello, ")12  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x41, 0x64, 0x61}}.WriteString(name"Ada")13  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x41, 0x64, 0x61, 0x21}}.WriteString("!")1415  message→ "Hello, Ada!" := builderstrings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x41, 0x64, 0x61, 0x21}}.String()16  fmt.Println("name=", name"Ada")17  fmt.Println("message=", message"Hello, Ada!")18  fmt.Println("length=", len(message"Hello, Ada!"))19}
    outputname= Ada
    message= Hello, Ada!
    length= 11
  1. name ← "Grace", builder ← strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)}

    8func main() {9  var name→ "Grace" = "Grace"10  var builder→ strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)} strings.Builder11  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20}}.WriteString("Hello, ")12  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x47, 0x72, 0x61, 0x63, 0x65}}.WriteString(name"Grace")13  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x47, 0x72, 0x61, 0x63, 0x65, 0x21}}.WriteString("!")1415  message→ "Hello, Grace!" := builderstrings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x47, 0x72, 0x61, 0x63, 0x65, 0x21}}.String()16  fmt.Println("name=", name"Grace")17  fmt.Println("message=", message"Hello, Grace!")18  fmt.Println("length=", len(message"Hello, Grace!"))19}
    outputname= Grace
    message= Hello, Grace!
    length= 13
  1. name ← "Linus", builder ← strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)}

    8func main() {9  var name→ "Linus" = "Linus"10  var builder→ strings.Builder{addr:(*strings.Builder)(nil), buf:[]uint8(nil)} strings.Builder11  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20}}.WriteString("Hello, ")12  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x4c, 0x69, 0x6e, 0x75, 0x73}}.WriteString(name"Linus")13  builder→ strings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x4c, 0x69, 0x6e, 0x75, 0x73, 0x21}}.WriteString("!")1415  message→ "Hello, Linus!" := builderstrings.Builder{addr:(*strings.Builder)(⟨addr A⟩), buf:[]uint8{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x4c, 0x69, 0x6e, 0x75, 0x73, 0x21}}.String()16  fmt.Println("name=", name"Linus")17  fmt.Println("message=", message"Hello, Linus!")18  fmt.Println("length=", len(message"Hello, Linus!"))19}
    outputname= Linus
    message= Hello, Linus!
    length= 13