Performance and Benchmarking Basics
Slice Preallocation
Preallocating a slice can make growth intent explicit and avoid repeated capacity changes.
Slice Preallocation
slice_preallocation.go
package main
import "fmt"
func main() {
var expected =
values := make([]int, 0, expected)
for i := 0; i < expected; i++ {
values = append(values, i*i)
}
fmt.Println("expected=", expected)
fmt.Println("length=", len(values))
fmt.Println("capacity=", cap(values))
fmt.Println("values=", values)
}
package main
import "fmt"
func main() {
var expected =
values := make([]int, 0, expected)
for i := 0; i < expected; i++ {
values = append(values, i*i)
}
fmt.Println("expected=", expected)
fmt.Println("length=", len(values))
fmt.Println("capacity=", cap(values))
fmt.Println("values=", values)
}
package main
import "fmt"
func main() {
var expected =
values := make([]int, 0, expected)
for i := 0; i < expected; i++ {
values = append(values, i*i)
}
fmt.Println("expected=", expected)
fmt.Println("length=", len(values))
fmt.Println("capacity=", cap(values))
fmt.Println("values=", values)
}
preallocation
Use `make` with capacity when code already knows the likely number of appended values.