Create a slice

suggest change

Most of the time you don't have to explicitly create a slice. Zero value of a slice is nil and append works with that:

var a []int
fmt.Printf("a is %#v\n", a)
a = append(a, 3)
fmt.Printf("a is %#v\n", a)
a is []int(nil)
a is []int{3}

There are 2 ways to create an empty slice:

var nilSlice []bool
empty1 := []bool{}
empty2 := make([]bool, 0)
fmt.Printf("nilSlice is %#v\n", nilSlice)
// empty slice is different than nil slice
fmt.Printf("empty1 is %#v\n", empty1)
fmt.Printf("empty2 is %#v\n", empty2)
nilSlice is []bool(nil)
empty1 is []bool{}
empty2 is []bool{}

Empty slice is different than nil slice.

Create statically pre-allocated slice:

a := []int{3, 1, 4, 1}
fmt.Printf("a has %d elements\n", len(a))
a has 4 elements

Pre-allocate slice filled with zero values:

a := make([]string, 4)
fmt.Printf("a has %d elements\n", len(a))
a has 4 elements

If you know the expected size of the slice, you can pre-allocate space for its content, which helps performance:

n := 30
a := make([]int, 0, n)
fmt.Printf("a has lenght %d and capacity %d\n", len(a), cap(a))
for i := 0; i < n; i++ {
	a = append(a, i)
}
fmt.Printf("a has lenght %d and capacity %d\n", len(a), cap(a))
a has lenght 0 and capacity 30
a has lenght 30 and capacity 30

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents