Convert array to slice in Go

This should work:

func Foo() [32]byte {
    return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}
}

func Bar(b []byte) {
    fmt.Println(string(b))
}

func main() {
    x := Foo()
    Bar(x[:])
}

And it doesn't create a copy of the underlying buffer


arr[:]  // arr is an array; arr[:] is the slice of all elements

This will do the trick:

slice := array[0:len(array)]

Also avoids copying the underlying buffer.


You can generally slice an array by its bounds with : :

var a [32]byte 
slice := a[:]

More generally, for the following array :

var my_array [LENGTH]TYPE

You can produce the slice of different sizes by writing :

my_array[START_SLICE:END_SLICE]

Omitting START_SLICE if it equals to the low bound and END_SLICE if equals to the high bound, in your case :

a[0:32] 

Produces the slice of the underlying array and is equivalent to :

a[0:]
a[:32]
a[:]