A Go string concatenation library that is more efficient than strings.Builder.
go get github.com/stanNthe5/stringbuf
sb := stringbuf.New("Hello ", "world,")
sb.Append("I am ", "StringBuf")
sb.Prepend("StringbBuf ", "testing: ")
str := sb.String()
// stringbuf_bench_test.go
go test -bench=. -benchmem
cpu: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz
BenchmarkStringBuf_Append-6 10000 209105 ns/op 479674 B/op 16 allocs/op
BenchmarkStringsBuilder_Append-6 1087 1063544 ns/op 1979769 B/op 24 allocs/op
BenchmarkStringBuf_Prepend-6 10000 207060 ns/op 479674 B/op 16 allocs/op
BenchmarkStringsBuilder_PrependSimulated-6 14 81451154 ns/op 407881812 B/op 2014 allocs/op
It defers the actual string concatenation (copying data) until String()
or Bytes()
is called. During Append or Prepend, it primarily stores references to the input strings in internal [][]string
slices, chunking them to reduce reallocations compared to strings.Builder which might repeatedly reallocate and copy the growing byte buffer during every append. Prepending is also handled efficiently using a separate buffer, avoiding costly data shifting. (Inspired by the Node.js v8 engine)