Strings and Text Processing
Builder Format
strings.Builder builds a string through small append-style writes.
builder
A builder is useful when code assembles text from several pieces.
Builder Format
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))
}
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
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
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